Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅使用HTTP/2时,XMLHttpRequest响应'`statusText`属性似乎是用户代理定义的_Javascript_Browser_Xmlhttprequest_Http Status Codes_Http2 - Fatal编程技术网

Javascript 仅使用HTTP/2时,XMLHttpRequest响应'`statusText`属性似乎是用户代理定义的

Javascript 仅使用HTTP/2时,XMLHttpRequest响应'`statusText`属性似乎是用户代理定义的,javascript,browser,xmlhttprequest,http-status-codes,http2,Javascript,Browser,Xmlhttprequest,Http Status Codes,Http2,我们将XHR请求发送到后端,从而接收此类响应对象(无论浏览器是什么): { 现状:200, 状态文本:“确定”, 配置:{…}, 数据:{…} } 我们刚刚迁移到另一个支持HTTP/2的负载平衡器。由于某些原因,statusText属性现在因浏览器而异: 铬(56.0.2924.87): { 现状:200, statusText:,//为空 配置:{…}, 数据:{…} } Firefox(51.0.1): { 现状:200, statusText:“OK”,//与前面一样(+1) 配置:{

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

{
现状:200,
状态文本:“确定”,
配置:{…},
数据:{…}
}
我们刚刚迁移到另一个支持HTTP/2的负载平衡器。由于某些原因,
statusText
属性现在因浏览器而异:

铬(56.0.2924.87):

{
现状:200,
statusText:,//为空
配置:{…},
数据:{…}
}
Firefox(51.0.1):

{
现状:200,
statusText:“OK”,//与前面一样(+1)
配置:{…},
数据:{…}
}
Safari(10.0.3):

{
现状:200,
statusText:“HTTP/2.0 200”、/?!
配置:{…},
数据:{…}
}
我们有读取
statusText
属性的遗留代码,因此一些行为被破坏。它很容易被修复(所以这最终是一个很好的观点),但是,为什么仍然存在。。。知道发生了什么吗

旁注:

  • 我们使用的是AngularJS 1.x,但是,这一定不是角度问题

  • 因为它似乎依赖于浏览器,所以不应该是负载平衡器的问题。。。我错了吗?(需要大脑)

  • 我当时希望在一些规范中找到类似“
    statusText
    是用户代理定义的,因此您不应该依赖它”(例如),但或都没有提供有关此属性的详细信息

    • 根据

      XMLHttpRequest.statusText属性返回一个包含 HTTP服务器返回的响应状态消息


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

      有趣的是,我个人将这句话理解为“服务器返回一个状态(例如200403),并且
      statusText
      保存相应的状态消息”。换句话说,“服务器只负责状态”,所以某些东西负责填充该属性,但我可能误解了。而且,如果它是后端端,那么这应该也发生在HTTP/1.x上,IMHO,你认为呢?我不是这样解释的。事实上,除了服务器发送
      status
      statusText
      之外,其他任何东西都没有意义,因为将来对HTTP的更改可能会产生新的响应。这正是我认为在新的负载平衡环境中切换到HTTP/2是罪魁祸首的原因。我认为客户端根本不参与(除了将其用户代理字符串发送到服务器之外)。非常感谢您的想法,我会仔细检查这些负载平衡器规范,然后,我会通知您:)最后,HTTP/2不再具有此属性,@JulianReschke指出了我以前没有注意到的正确链接:啊,好了,你找到了!谢谢你发布链接。