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

Javascript 当前的XHR实现是否利用了HTTP/2?,javascript,xmlhttprequest,http2,Javascript,Xmlhttprequest,Http2,这可能只是突出了我的一些误解,但我很好奇: 如果您有一个HTTP/2服务器正在运行,并且希望在浏览器中向服务器发出XHR请求,那么XHR是否会自动利用标头中的性能优化以及它提供的性能优化 或者它会忽略该功能,并作为HTTP请求进行操作?如果是这样,我们可以做些什么来在我们的请求中使用新的优化?您不需要做任何事情。如果服务器支持HTTP/2,XHR将使用它。收割台压缩等将自动启动 测试它: 在Chrome中打开HTTP/2网站。你可以用我们的 打开Devtools面板(F12),然后打开网络面板

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

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


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

您不需要做任何事情。如果服务器支持HTTP/2,XHR将使用它。收割台压缩等将自动启动

测试它:

  • 在Chrome中打开HTTP/2网站。你可以用我们的
  • 打开Devtools面板(F12),然后打开网络面板,然后单击XHR。右键单击标题行,并确保启用了“协议”列
  • 您应该在上述列中看到“h2”(在我们的例子中,AngularJS正在通过XHR加载模板include)
  • 此时,请注意服务器推送了XHR请求。推送响应的信号是“临时头”而不是请求头,以及异常小的“下载”和“等待”时间。我们甚至在响应中添加了一个额外的头(x-shimmercat-note:pushedstream)。浏览器采用了此请求,因此XHR请求不仅将使用HTTP/2(如果可用),而且在某些情况下还可以使用推送的资源

ajax在http1.1接口上运行,至少目前是这样。有些性能优化是透明的(报头压缩),有些则不适用(多个资源)。@dandavi不确定我是否正确地理解了你。你在说哪个浏览器?@dsign:都是;xmlHttpRequest级别2出现在http2之前,因此ajax接口(基于http1.1)没有新的方法或功能,即使基础层使用http2。问题的关键是:浏览器利用了http2,但JS代码不允许程序员利用http1的任何额外优势…@dandavis“XHR会自动”。。。对不起,我不知道Nick在问API中的新玩具。无论如何,想象这些扩展可能是什么是一个有趣的练习。AFICS唯一的选择是采用推送流,这在某种程度上已经是可能的。很好,但是推送资源会从ajax请求中得到什么呢?除了预缓存之外还有什么吗?或者我想我要问的是,它是否改变了ajax的视图(响应、状态、标题等),或者所有这些内容是否与以前一样。据我所知,ajax api交互与以前一样,这也是您的理解吗?@dandavis是的,我认为您是对的。Ajax请求甚至很难意识到资源被推送了。但是让我告诉你,HTTP/2推送太新了(不是真的,但只是慢慢开始起步),甚至从等式中删除了XHR。
XHR.onprogress
可以用来接收推送的资源。