仅使用 HTTP/2,XMLHttpRequest 响应的"statusText"属性似乎是用户代理定义的。



我们将XHR请求发送到我们的后端,从而接收此类响应对象(无论浏览器如何):

{
  status: 200,
  statusText: "OK",
  config: {...},
  data: {...}
}

我们刚刚迁移到支持HTTP/2的另一个负载平衡器。由于某种原因,statusText属性现在因浏览器而有所不同:

Chrome(56.0.2924.87):

{
  status: 200,
  statusText: "", // empty
  config: {...},
  data: {...}
}

firefox(51.0.1):

{
  status: 200,
  statusText: "OK", // as previously (+1)
  config: {...},
  data: {...}
}

Safari(10.0.3):

{
  status: 200,
  statusText: "HTTP/2.0 200", // ?!
  config: {...},
  data: {...}
}

我们的旧代码正在阅读statusText属性,因此有些行为被打破了。它很容易修复(所以终于是一个很好的点),但是仍然,为什么仍然...知道发生了什么事?

旁注:

  • 我们使用的是AngularJS 1.x,但是它只是从XHR响应中复制此statusText属性,因此这一定不能是一个角度问题。

  • 似乎取决于浏览器,这不应该是负载平衡器问题...我错了吗?(需要大脑)

  • 我期望在某些规格中找到诸如" statusText是用户代理定义"之类的东西,因此您不应依靠它 "(就像storege#key一样(...例如),但MDN和获取标准都没有提供有关此属性的详细信息。

根据 mdn

xmlhttprequest.statustext属性返回包含的圆顶 HTTP服务器返回的响应状态消息。

因此,您的负载平衡服务器配置可能不是同步的100%。可能会有一些服务器配置,可以根据用户代理提出请求发送不同的响应。

最新更新