分享下HTTP状态码的使用场景,出现原因和解决方法 | 马犇-技术博客

分享下HTTP状态码的使用场景,出现原因和解决方法

来源:本站原创 微信技术群总结 超过3,173 views围观 0条评论

【今日话题】分享下HTTP状态码的使用场景,出现原因和解决方法 – twin

 

1. 499就是客户端放弃,没啥说的. 尤其发生在一些api调用上,设置了超时,服务端还没返回,客户端就放弃了。 – 付坤

回: 默认多长时间 – 北极公爵

回: 这是客户端问题,设超时就有,没设就没有 – 付坤

回: 那没设置也会有499吧. 499 是nginx 自己定的 – 北极公爵

回: 还有发生在用户身上,打开你页面太慢,就关掉了,也是499。499是nginx自己定义的一个响应码。总之就是服务端还没返回,客户端放弃这次请求了 – 付坤

 

2. 5开头表示服务端错误,4开头客户端,3开头的表示有变化 – 赵拂衣

 

3. 有些问题虽然是4开头的但是不一定是客户端造成的 比如403 同样要检查,服务器 – 蚂蚁

 

4. 协议是如此约定的,客户端负责请求,服务端负责响应。403在服务器看来确实是客户端的请求出了错误。这也是个很正常的场景。 – 赵拂衣

 

5. 499的情况有,但是不太多. 一般应该是客户端主动关闭了连接 – 黑夜路人

 

6. WEB 开发中。最常见的应该是500错误了。很多在线上环境下,根本看不出500错误原因。所以,建议本地测试或者是开启错误提示,这样可以看到错误原因。 – A.刘波@云软科技

 

7. 对,在php环境下,通常是display_errors没有开启的问题 – LAMP李捷

 

8. Php 500直接error log 就能看见 – 亢

 

9. 那天遇到个414错误,醉了… 结果发现学生用get提交数据. 果断改成post,问题解决. uri过长 – LAMP李捷

 

10. ie6 A 有href跳转,又绑定click ajax,会导致浏览器放弃ajax请求 产生499 – 楚吟风

回: 那如何拦截 href 跳转 进行 ajax 请求? – ArPeng

回: js去掉href改在ajax完成后location. 曾被这个坑过半天. 抓包都是正常的 – 楚吟风
回: 有没有不去掉直接进行拦截的方法 就是不让他进行跳转 连接还在. 这么用A不符合前端规范. 还是换成 btn span更好 – 楚吟风

回: 用同步的ajax,然后在回调里动态添加a.href – york
回: 这样可以骗蜘蛛 让蜘蛛爬取的是一个内容 用户看到的是另外一个内容 – ArPeng

回: 有的时候,为了SEO ,可以能想献给蜘蛛的是一个漂亮的A链接,但让用户操作的,其实是跳转链接。那就不能不能做一个屏蔽A href 的事件操作了 – A.刘波@云软科技
回: dom ready后修改href也不影响蜘蛛 – 楚吟风

回: IE6form里面也有这样的问题 – 吴子琪

 

11. 我个人的使用最多的是在REST API设计中,根据请求数据及处理情况返回相应的http status code, 而不是所有请求都是200 OK,主要是:

1) 2xx: API GET/PATCH成功时一般返回200 OK, API POST/PUT成功创建数据时选用201 Created等

3) 4xx: API数据验证不通过的400 Bad Request, 需要用户登录权限的401 Unauthorized, 资源不存在 404 Not Found
4) 5xx: 数据库查询失败、服务器配置错误等返回500 Internal Server Error, 未来预留的接口但是目前未开发的一般返回501 Not Implemented
好处很明显,HTTP状态码本身跟REST API资源的创建获取是契合的,而且表达的意思显而易见,另外客户端调用API可优先检测http response header status code进行判断请求执行情况。
坏处是表达的是一类错误,不够精确,如果能在response body中配合自定义的错误代码,比如400001代表用户不存在, 400002代表用户密码错误等,可更好的传递详细的错误信息给客户端。
这样http status code主要是面向开发人员的错误提示,自定义错误代码是代表给终端用户的具体错误信息。整体API也会比较通用简洁。 – Henry

阅读