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

2022-01-15 00:00:00 xmlhttprequest javascript http2

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

This may just highlight some misconception of mine, but I was curious:

如果您正在运行 HTTP/2 服务器并希望在浏览器中向服务器发出 XHR 请求,XHR 会自动利用标头中的性能优化以及它提供的性能优化吗?

If you had an HTTP/2 server running and wanted to make XHR requests in the browser to the server, would XHR automatically take advantage of the performance optimisations in headers and such that it provides?

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

Or would it ignore that functionality and operate as an HTTP request? If so, are there any things we can do to use the new optimisations in our requests?

推荐答案

你不需要做任何事情.如果服务器支持 HTTP/2,XHR 将使用它.标头压缩等会自动启动.

You don't need to do anything. If the server supports HTTP/2, XHR will use it. Header compression and such will kick in automatically.

测试一下:

  • 在 Chrome 中打开一个 HTTP/2 网站.您可以使用我们的 来查看一些关于 HTTP/2 PUSH、AngularJS 和 RequireJS 的酷东西.
  • 打开 Devtools 面板 (F12),然后打开网络面板,然后单击 XHR.右键单击标题行,并确保您拥有协议";列已启用.
  • 您应该会看到h2";在上述列中(在我们的例子中,AngularJS 正在通过 XHR 加载模板).
  • 此时,请注意服务器推送了 XHR 请求.推送响应的标志是临时标头".而不是请求标头,以及异常小的下载"和等待"次.我们甚至在响应中添加了一个额外的标题 (x-shimmmercat-note:pushed-stream) .浏览器采用了这个请求,因此XHR 请求不仅会使用 HTTP/2(如果可用),而且在某些情况下可以使用推送资源.

相关文章