百科问答小站 logo
百科问答小站 font logo



为什么那么多公司做前后端分离项目后端响应的 HTTP 状态一律 200? 第1页

  

user avatar   qinlili233 网友的相关建议: 
      

用于分离外网错误还是内网错误

如果一律返回200,却收到了非200的结果,就说明外网出问题了,可能是运营商缓存服务器的问题,可能是DNS污染等等

而内网错误则在200返回的内容里用code来表示,就可以很好的定位问题



很多人开发的时候因为都在内网测试,没有遭遇过外网错误,所以就会觉得这种做法很多余

但在实际使用中,尤其是服务器和用户跨国甚至跨洲的情况下,整个外网传输过程并不稳定,可能会出现各种异常,这种情况下这种一律返回200来区分外网错误和内网错误的做法就显得非常有价值了



举个例子吧,众所周知vercel免费版不大稳定,有时候会503。如果我把自己内部代码错误也http返回503,那么client侧就无法辨别到底是我的代码出问题了还是vercel炸了。如果我用http返回200,code503的办法,client得到了http503那就可以提示用户是vercel炸了而不是我代码出错了,code503才是vercel没炸而我代码炸了。这种思路在白嫖很多免费而不稳定的云服务时非常有用,尤其是如果同时部署了vercer,glitch,heroku等多个平台,可以通过http code判断平台是否爆炸而自动冗余切换其他平台继续服务,对于吾等没钱买pro套餐的用户来说非常好使


user avatar   haozhi-yang-41 网友的相关建议: 
      

根本的原因是:HTTP协议本来就不是设计为业务系统的传输层


在HTTP协议设计之初,它是用于(基于请求/应答对的web)业务的,后面略微扩展为简单的文件传输(毕竟web也是文件)。所以,HTTP的code本来是应对web页面的业务状态的,是业务的状态码。

但是在restful的各种场景下,HTTP被当作传输层,而上面真正运行的业务却五花八门,完全脱离了web的范畴。所以,HTTP的那套code完全套不上,或者说硬套上去也很别扭:例如说404,找不到页面。当然,你可以宽泛的解释为“找不到资源”——但如果你一个业务请求中涉及到了ABC三个资源,你光一个404,怎么表示到底找不到哪个?如果你说把ABC三个资源合并为一个“虚拟资源”,那么ABC三者到底是“和”关系还是“或”关系?当然,你非要写一份完整的协议文档,详细的解释清楚你的所有的code的套用方式,也不是不行。但就算如此,如果我需要精确知道具体是ABC的哪个(例如说给用户精确的提示),不还是要在payload里折腾一番?那你看绕了一圈,不还是回来了?何必呢?


总之,既然当了传输层,就要有当传输层的自觉:作为业务系统的小配角,不要总想着和主角(应用层)抢戏。

你看看老资格的传输层,返回码(状态码)都是什么?如果是流式传输,那就是字节数。如果是包式传输,要么是包个数,要么就是简单的true/false。

而现在HTTP当作传输层了,那么它本质上是一种高级(变长、可确认、可校验)的UDP。因此,它的code只有200和非200(本质上就是true/false),就理所当然了。


user avatar   xadillax 网友的相关建议: 
      
不对现状置可否。只是回忆一下以前的年代。

在运营商劫持横行、HTTPS 未普遍之前,基本上你不可以信任任何非 200 的响应码。

比如你返回一个 404,它会把你的返回完完全全变成另一个 HTML 代码(对,即使你是 JSON),里面全是运营商劫持的广告,甚至有些就是运营商官方的一些页面(升级宽带、网速测试云云)。

这就是当年我为什么一直用 200,且在 JSON 中再写个状态码。

当然,这种情况现在已有好转。


user avatar   catchen 网友的相关建议: 
      

有见过同一家公司内混合使用 HTTP 状态码和 200 加 JSON 错误信息的吗?有见过一家公司内同一个 micro service 当中也如此混合使用的吗?这个世界没有最恶心,只有更恶心。




  

相关话题

  美国国会举行听证会讨论 「Web3.0」,目前技术发展状况如何?未来可能在哪些领域带来新发展? 
  JavaScript里面有什么是不用刻意学的? 
  在国内前端领域里优秀的人很多,为什么没人做出 angularjs 、jQuery 之类优秀的框架? 
  如何看待知乎、饿了么后端的招聘纷纷由 Python 渐渐转向 Java? 
  后端开发第一次做项目,该如何实现前端页面?可以拿别人开源项目的页面过来直接用,自己写后端接口吗? 
  网上常能见到的一段 JS 随机数生成算法如下,为什么用 9301, 49297, 233280 这三个数字做基数? 
  CSS Grid 布局那么好,为什么至今没有人开发出基于 Grid 布局的前端框架呢? 
  22岁,师范大学妹子,学的物理专业,现在转行学习前端,大家有什么好的或者不好的建议吗? 
  有哪些设计精美的网页? 
  为什么那么多公司做前后端分离项目后端响应的 HTTP 状态一律 200? 

前一个讨论
开网店发现有个账号频繁在我下单,每次送货地址都不一样。怀疑有人用我这里的货另开店铺赚差价,怎么办?
下一个讨论
淘宝上一些价格便宜到离谱、标注45天发货的店铺的阴谋是什么?45天后会发生什么?





© 2025-05-06 - tinynew.org. All Rights Reserved.
© 2025-05-06 - tinynew.org. 保留所有权利