请求前的HTTP响应

我的问题可能听起来很愚蠢,但我只是想确定一下:

  • 在请求资源之前是否可以发送HTTP响应?

比如说你有一个HTML页面index.html ,它只显示一张名为img.jpg的图片。 现在,如果你的服务器知道访问者每次都会请求HTML文件,然后是JPG图片:

服务器是否可以在HTML文件后面发送图像以节省时间?

我知道HTTP是一个同步协议,所以在理论上它不应该工作,但我只是想让别人确认(或不)。

如果有人请求/index.html,并发送两个响应(一个用于/index.html,另一个用于/img.jpg),您怎么知道接收者会在第二个响应之前得到两个响应并知道如何处理请求进去了吗?

问题并不在于发送。 问题在于接收器可能收到意想不到的数据。

另一个问题是,你拒绝客户端使用HTTPcaching工具,如If-Modified-Since和If-None-Match(即客户端可能不希望发送/img.jpg,因为它已经有一个caching复制)。

也就是说,您可以使用Comet技术来近似服务器推送的好处。 但是,这比简单地预测传入的HTTP请求要复杂得多。

Jacques Mattheij最近发表的一篇关于你的问题的文章声称,尽pipeHTTP被devise成一个同步协议,但实现却不是。 在实践中,浏览器(他没有明确指出)接受请求的答案还没有被发送。

另一方面,如果你正在寻找一些不太可靠的东西,你可以看看:

  • 推技术,允许服务器发送内容到浏览器。 取代长轮询/彗星“黑客”的现代实现是websocket 。 你也可以看看socket.io 。
  • 或者,你可能想看看客户端路由 。 一些实现将这与caching技术结合起来(就像我认为的derby.js )。

通过有效地caching资源,您将获得更好的结果,即设置正确的caching标头并configuration您的Web服务器以进行caching。 如果这是一个特定的问题,您也可以使用base 64编码来embedded图像 。

你也可以看看长的投票 JavaScript解决scheme。

您正在寻找服务器推送 :它在HTTP中不可用。 像SPDY这样的协议有它,但是如果你只限于HTTP,那么你运气不好。

我不认为有可能在同一个HTTP响应中混合.html和图像。 至于立即发送图像数据,就在第一个请求之后 – 就有一个“静态资源”的概念,可能会有帮助(但是需要客户为特定的资源创build一个新的请求)。

文章中提到了一些有趣的事情。

不,这是不可能的。

请求的第一行持有被请求的资源,所以除非您首先检查请求的字节(至less一行的值),否则不知道该如何回应。

HTTP被定义为请求/响应协议。 一个请求:一个响应。 其他任何东西都不是HTTP,这是别的,你必须正确指定它,并在两端完全实现它。