【问题标题】:Do current XHR implementations take advantage of HTTP/2?当前的 XHR 实现是否利用了 HTTP/2?
【发布时间】:2015-12-12 01:48:44
【问题描述】:

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

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

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

【问题讨论】:

  • ajax 在 http1.1 接口上运行,至少目前是这样。有些性能优化是透明的(标头压缩),有些则不适用(多个资源)。
  • @dandavis 不确定我是否理解正确。你说的是哪个浏览器?
  • @dsign:全部; xmlHttpRequest 级别 2 在 http2 之前出现,因此 (afaik) 没有新方法或 ajax 接口(基于 http1.1)的功能,即使基础层使用 http2。切入问题:浏览器利用了http2,但是JS代码并没有让编码器比http1有任何额外的优势......
  • @dandavis “会自动进行 XHR”...抱歉,我没有意识到 Nick 是在询问 API 中的新玩具。无论如何,想象这些扩展可能是什么是一个有趣的练习。 AFICS 唯一的做法是采用推送流,这在某种程度上已经成为可能。

标签: javascript xmlhttprequest http2


【解决方案1】:

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

测试一下:

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

【讨论】:

  • 很好,但是从 ajax 请求中推送的资源会来自哪里?
  • 除了预缓存还有什么?或者我想我要问的是它是否改变了 ajax 的视图(响应、状态、标题等),或者所有这些东西的行为是否与以前相同。据我所知,ajax api交互和以前一样,你也这么理解吗?
  • @dandavis 是的,我认为你说得对。 Ajax 请求甚至很难意识到资源已被推送。但是让我告诉你,HTTP/2 推送太新了(不是真的,但只是慢慢开始起飞),甚至从等式中删除 XHR。
  • XHR.onprogress 可用于接收推送的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2011-07-19
  • 2017-08-19
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多