http - SPDY 与通过保持事件连接的 http 多路复用有什么不同

标签 http firefox keep-alive spdy

HTTP 1.1 支持 keep alive connections,在发送“Connection: close”之前,连接不会关闭。

那么,如果浏览器,在本例中firefox启用了network.http.pipelining,增加了network.http.pipelining.maxrequests,到底是不是一样的效果呢?

我知道这些设置已禁用,因为对于某些网站来说这可能会增加负载,但我认为一个简单的 http header 标志可以告诉浏览器可以使用多路复用,并且可以更轻松地解决此问题。

在浏览器中更改默认设置会不会比发明一种增加复杂性(尤其是在 http 服务器中)的新协议(protocol)更容易?

最佳答案

SPDY 具有许多超越 HTTP 流水线技术所能提供的优势,这些优势在 SPDY whitepaper 中有所描述。 :

  1. 使用流水线,服务器仍然必须按照请求的顺序一次返回一个响应。如果客户端在请求静态资源之前请求动态生成的资源,这可能会成为一个问题:在生成并发送动态生成的资源之前,服务器无法发送任何“简单”静态响应。使用 SPDY,响应可以乱序返回或在生成时并行返回,从而减少接收所有资源的总时间。
  2. 正如您在问题中指出的那样,并非所有服务器都能够处理流水线:不仅仅是负载,有些服务器在客户端请求流水线时实际上表现不正确。使用 header 来指示可以进行流水线操作为时已晚,无法获得最大 yield :此时您已经收到第一个响应,因此虽然您可以在未来的连接中使用它,但对于这个连接来说已经太晚了。<
  3. SPDY 使用特定于该任务的算法压缩 header (有状态并且了解 HTTP header 中通常包含的内容);是的,SSL 已经包含压缩,只是用 deflate 压缩它们效率不高。大多数 HTTP 请求没有正文,只有一小段 GET 行,因此 header 实际上构成了整个请求:您可以获得的任何压缩都是一种改进。与标题相比,许多回复也很小。
  4. SPDY 允许服务器在客户端不要求的情况下发回额外的响应。例如,在客户端有机会接收和解析 HTML 以确定样式表 URL 之前,服务器可能会开始发回页面的 CSS 和原始 HTML。通过消除客户端在请求呈现页面所需的其他资源之前实际解析 HTML 的需要,这可以进一步加快页面加载速度。它还支持此功能的带宽较少的版本,它可以“提示”可能需要哪些资源,并允许客户端决定:例如,这允许不关心图像的客户端不必理会请求它们,但想要显示图像的客户端仍然可以使用给定的 URL 请求图像,而无需等待 HTML。
  5. 还有其他事情:更多信息请参阅 William Chan 的回答。

关于http - SPDY 与通过保持事件连接的 http 多路复用有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362171/

相关文章:

javascript - 将客户端生成的数据分块保存为 JavaScript 中的文件

具有保持事件状态的 Python 流式 http 客户端

node.js - 与 Superagent 保持连接

javascript - Firefox 偶尔不会加载动态 iframe

javascript - element.currentSrc 在除 Firefox 之外的所有浏览器中返回 URL

linux - kubectl exec 的 Keepalive

http - 如何检查ResponseWriter是否已经写入

javascript - 如何要求浏览器缓存文件以备将来使用

visual-studio - VS Enterprise .NET Build Extensions 版本的 System.Net.Http 覆盖预期的 4.3.3 nuget 版本

node.js - Socket.socketOnData 解析错误