【问题标题】:Is replying to client before receiving complete request allowed for HTTP 1.0 server?HTTP 1.0 服务器允许在接收到完整请求之前回复客户端吗?
【发布时间】:2012-11-01 17:49:31
【问题描述】:

我找不到可以回答这个问题的 RFC。也许你们可以为我指明正确的方向。

我正在实现精简的 http 服务器,它的唯一功能是接受大的多部分编码上传。

在某些情况下,例如文件太大或者客户端没有权限上传,我希望服务器立即回复错误并关闭连接。

Chrome 浏览器似乎不喜欢它,因为它认为服务器返回的 http 代码为零。

Could not get any response

This seems to be like an error connecting to http://my_ubuntu:8080/api/upload. The response status was 0.
Check out the W3C XMLHttpRequest Level 2 spec for more details about when this happens.

因此问题:

HTTP 服务器允许在收到完整请求之前回复客户端吗?

更新:刚刚用 iOS 6 客户端测试过。同样的事情,它认为服务器突然关闭了连接:(

【问题讨论】:

  • 有趣的问题。我找不到特别禁止这样做的任何地方。但是,如果您编写一个 HTTP/1.1 服务器,因为您可以访问 Expect 标头和 100 Continue 响应,那么您的生活可能会简单得多。这正是他们打算解决的情况。我的意思是,HTTP/1.1 在 1994 年 正式发布……我想说是时候升级了。
  • @rdlowrey 是的,我现在正在考虑。我只是希望我可以在不更改客户端(iOS、Android 和 Flash)的情况下实现现有基于 PHP 的服务的直接替换。
  • 好吧,我自己最近刚刚实现了一个 1.1 客户端(不适用于您列出或我要分享的设备环境),我可以说这并没有那么困难。但是,我希望这些环境已经拥有经过彻底审查的库来为您处理客户端。
  • 立即回复错误是可以的(至少,Squid 是这样做的),但立即关闭连接不太常见(可能是manage.py runserver?)。
  • 不是一个答案,但它可能是一个正确的方向,因为看起来您正在使用 XMLHttpRequest? developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…

标签: http google-chrome post boost xmlhttprequest


【解决方案1】:

这是一个很好的问题,显然它非常模棱两可。您可能会喜欢阅读这篇关于“百万美元漏洞”的文章 - http://jacquesmattheij.com/the-several-million-dollar-bug

【讨论】:

    【解决方案2】:

    我认为这是证书信任问题。尝试手动信任该站点,随后的请求应该可以工作。

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2017-05-14
      相关资源
      最近更新 更多