当前的 XHR 实现是否利用了 HTTP/2?

Do current XHR implementations take advantage of HTTP/2?

这可能只是强调了我的一些误解,但我很好奇:

如果你有一个 HTTP/2 服务器 运行 并且想在浏览器中向服务器发出 XHR 请求,XHR 会自动利用 headers 中的性能优化等等它提供?

或者它会忽略该功能并作为 HTTP 请求运行吗?如果是这样,我们可以做些什么来在我们的请求中使用新的优化?

您无需执行任何操作。如果服务器支持 HTTP/2,XHR 将使用它。 Header 压缩等将自动启动。

测试一下:

  • 在 Chrome 中打开一个 HTTP/2 网站。您可以使用我们的 to also checkout some cool stuff regarding HTTP/2 PUSH, AngularJS and RequireJS.
  • 打开 Devtools 面板 (F12),然后打开网络面板,然后单击 XHR。右键单击 headers 行,确保启用“协议”列。
  • 您应该在所述列中看到“h2”(在我们的示例中,AngularJS 正在通过 XHR 加载模板包含)。
  • 此时,请注意服务器推送了 XHR 请求。 Tell-tale 推送响应的标志是“临时 headers” 而不是请求 headers,并且“下载”和“等待”时间异常短。我们甚至在响应中添加了一个 extra-header (x-shimmmercat-note:pushed-stream) 。浏览器采用了这个请求,所以 XHR 请求不仅会使用 HTTP/2 如果可用,而且在某些情况下可以使用推送的资源 .