提取无法识别102(或任何1xx)状态代码

时间:2019-12-05 17:56:43

标签: javascript fetch-api http-status-codes

我发现fetch的API始终会为TypeError或任何小于ERR_EMPTY_REPONSE的代码抛出NetworkError when attempting to fetch resource102200,无论响应的正文。

这花了我很多时间去弄清楚。 Fx,Chrome和Opera之间的行为保持一致。我还确认了邮递员可以正确识别102响应。

我想知道为什么会这样吗? 1xx代码应该可以,并且不能由fetch来决定是否是错误。我找不到任何文档,也似乎找不到处于相同情况的任何人。

这是设计使然吗?还是有解决这个问题的方法?我需要102

2 个答案:

答案 0 :(得分:2)

Fetch规范要求浏览器遵循问题中描述的行为。具体参见https://fetch.spec.whatwg.org/#ref-for-concept-response-status%E2%91%A0%E2%91%A8

  

任何状态为100199(包括),而不是101的响应都将被忽略。

     
    

注意:此类响应最终会跟随“最终”响应。

  

答案 1 :(得分:1)

只需跟进@sideshowbarker和 Google员工

  • 1xx代码被认为是信息性的,并且非最终性的(对于WebSocket,101除外)
  • 基本上,浏览器遵循此定义,并且期望更多内容遵循1xx代码
  • 我返回了102并与其他响应代码一样关闭了连接
  • 浏览器将其视为意外终止的连接并抱怨
  • 1xx响应应正确填写其他代码(> 199)

然后...

  • 浏览器抛出的错误太简单了,无法给出真实情况的见解
  • 部分响应(1xx代码和正文)将被忽略,因此不会被浏览器记录,并且将显示在控制台中,这使问题变得更加复杂
  • 即使999也适用于浏览器,因为它们不会像1xx代码那样被忽略

所以...

  • 除非您想保持一些长期运行的连接或使用WebSocket,否则不要使用1xx
  • 表示“收到请求后,我正在处理,请稍后再回来”,不要使用102 Processing,而是使用202 Accepted进行确认