• 肥low
    2019-06-25
    1、4xx一般是服务端业务状态码,看业务上怎么解决的,5xx就比较多了,500、502比如是在lnmp架构下,500是php代码写的很烂,导致nginx的upstream接受错误,抛异常了。502就是php-fpm挂了。504说明有慢查询php-fpm可能还在运行着,可是ngx由于本身的超时设置已经主动断开了,entity too large就是上传发文件超过ngx本身设置,其它的好像还没遇到过,404大多是浏览器请求facon.ico导致的,现在前后端分离根本没这个东西

    2、参数错误一般是通过接口返回具体的业务代码来表明,http响应报文一般都是200,也有400的,但是我的经验中一般是返回的body为json格式,然后里面通过一个errno来标识一下,具体怎么规定我觉得在接口文档中写清楚就好
    展开

    作者回复: 写的很好。

    
     7
  • 瑞
    2019-06-24
    第一个问题: 目前客户端基本都是解析成失败的情况,大部分给个失败错误友好界面
     
    第二个问题: 目前服务器很多也是返回4xx的错误妈,感觉被烂用了,应该要返回5xx,然后我们还会定义一个msg字段,用来说明具体失败的原因

    作者回复: √

    
     3
  • 壹笙☞漂泊
    2019-06-25
    课后题:
    1、给个错误页面、或者弹窗报个错误,然后做跳转
    2、在返回body里面写明错误原因,状态码一般给500

    总结:
    1、状态行结构:
    version【SP】status code【SP】reason【CRLF】
    version:是HTTP协议的版本号,用处不大
    reason:是原因短语,简短的文字描述,如果“OK”“Not Found”等等,也可以自定义,用处也不大,很多客户端会忽略,为了兼容早期的文本客户端
    status code:状态码,不是错误码,表达状态。以代码的形式表示服务器对请求的处理结果。
    2、状态码
    RFC标准规定状态码是三位数,把状态码分成了五类,用数字的第一位表示分类。
    * 1xx:提示信息,表示目前是协议处理的中间状态,还需要后续的操作;
    * 2xx: 成功,报文已经收到并被正确处理;
    * 3xx:重定向,资源位置发生变动,需要客户端重新发送请求;
    * 4xx:客户端错误,请求报文有误,服务器无法处理;
    * 5xx:服务器错误,服务器在处理请求时内部发生了错误。
    展开

    作者回复: 总结的不错。

    
     2
  • 马哲富
    2019-06-24
    希望老师在后续的过程中讲一下206这个断点续传,是不是类似于百度网盘那种下载软件暂停后再继续下载也是类似的原理?

    作者回复: 后面会专门讲的。

    
     2
  • 许童童
    2019-06-24
    1: 收到了一个非标准的状态码,一般约定返回message字段,然后弹窗提示
    2: 用406状态码
    
     2
  • 彧豪
    2019-06-24
    1.一般接口报错的话返回的body中都会封装有错误消息,显示消息即可,401一般都不作处理,比如获取登录用户的信息的接口,未登录的时候调是401,是因为没有带相应token过去,登录之后就能正常返回登录用户的信息了,自己处理的情况比如SPA,用户访问了一个不存在的路由,此时前端自己返回一个404的页面,里面是一张图片:“么么哒,网页找不到了耶”之类的🤣🤣,5xx这个时候需要找服务端沟通了,正式上线一般不会出现5xx的错误,一般在开发时出现
    2.返回的body中告知前端错误信息
    另外就是老师貌似忘了讲401了,401也挺常见/用的,默认原因短语是"Unauthorized",比如调登录接口没带授权的时候

    作者回复: 401在rfc7235中,我用的比较少,所以就不说了。

    感谢你的补充。

    
     2
  • 风翱
    2019-06-24
    对于问题二,如果缺少的参数,服务端采用友好的方式提示。 调试方面确实方便了,但是对于安全性呢?

    作者回复: 这里应该不涉及安全的问题,如果比较在意,可以约定用一些代码来表示。

     1
     1
  • 我行我素
    2019-06-24
    1.4**一般都是弹窗提示,将错误显示出来,5**有单独的页面显示错误信息;
    2.在自己的项目中都是返回json直接明确告诉缺少什么参数

    作者回复: √

    
     1
  • 无名
    2019-06-24
    问题一:4xx,5xx,跳转到单独页面提示。
    问题二:我们一般交互的都说json格式,会内部再定义一个code和msg,然后定义一个参数错误code,在msg中提示错误具体原因。

    作者回复: 不错。

    
     1
  • Wr
    2020-01-04
    1. 目前遇到的情况都是跳转一个空白页面,页面上方标注错误码和错误信息
    2. 返回一个4**类型的错误码吧,返回错误信息为请求错误之类的(这几天处理开发写的自动化脚本,由于协议变更,请求出现很多问题,比如请求里的json字段不符合新的的协议规范,返回的错误一般都是403,应该和这个问题类型,但是我看很多同学评论的都是5**错误码,这是问什么呢?)

    作者回复:
    1.这样也可以,但比较简单,对用户不太友好。

    2.我认为返回4xx错误比较好,说明这是客户端的错误,但因为http很灵活,只要双方约定好,5xx也可以。

    
    
  • 听雨
    2019-11-05
    这些状态码是怎么出现的呢,自己代码中也没有设置呀,怎么自动就有了呢。重定向,怎么就知道资源位置发生变化,并且返回状态码的。我用redirect测试,只有200,也没有3xx呀

    作者回复:
    1.有的状态码是底层应用自动完善的,比如如果不设置就自动是200。

    2.重定向是服务器开发者自己知道资源有变化,手动设置的。比如网站临时维护,就重定向到维护页面。

    3.重定向必定是3xx代码,可以在Chrome开发者工具里看,比如在实验环境里。你用的可能是php吧,可以看一下函数手册,看它是怎么运作的。

    
    
  • 星极
    2019-10-28
    弱弱问句,最后2个问题中的http客户端和服务器分别指的是类似HttpClient和Nginx,还是业务开发时http接口的请求方和服务方?个人比较严谨,老师看到了麻烦回复下

    作者回复: 我认为是第二种理解。

    
    
  • 齐庆福
    2019-10-27
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/100

    作者回复: 100状态码用的很少,我个人不太推荐使用。

    
    
  • 蓝白条纹
    2019-10-21
    第二个问题,看到有人说4××.也有人说返回5××代码,老师你都说是对的。描述是响应头缺少参数,像这种格式上正确,服务端实际处理时发现的缺少参数,到底是算客户端的错误还是算服务端的呢?

    作者回复: 因为http很灵活,所以对于同一个问题会有多个解法,不存在唯一的答案。

    所以对于这样的错误,可以根据自己的实际情况来处理,如果严格要求客户端,那么就返回4xx,认为是客户端错误。如果严格要求服务器,那么就认为缺少必须的数据无法处理,返回5xx。

    
    
  • Demon.Lee
    2019-10-11
    开发过程中遇到了一个response.code是201,查询了下表示:请求已经被实现,而且有一个新的资源已经依据请求的需要而创建,且其URI已经随Location头信息返回。假如需要的资源无法及时创建的话,应当返回'202 Accepted'。

    作者回复: 2xx代码在课程里没有全列出来,只讲了几个最常用的。因为http很灵活,所以返回码要求的也不是很严格,可以在头字段、body里再返回更多的信息。

    
    
  • qiezitx
    2019-09-25
    1、跳转到一个统一的页面/弹窗。当然也要根据业务需求,pm说的算。。。
    2、请求有误,属于4xx。看看已知状态码中有没有定义,没有的话自定义一个。ps,看到有同学回答,返回200或500,然后在body去定义,的确很多怎么搞的,可能是怕到时候自定义多了400的区间不够,拿出来另找区间更清楚吧。

    作者回复:
    1.对

    2.是的,所以很多时候都是返回一个json,里面自由定义错误信息。

    
    
  • 渴望做梦
    2019-08-21
    老师,如果客户端的请求参数有问题,无法识别,这时候服务端该如何返回呢?

    作者回复: 可以返回一个4xx错误,然后在body里用json等格式说明具体的错误原因。

    其他的同学已经回答了,可以参考。

    
    
  • Geek_steven_wang
    2019-08-14
    4xx错误时,要尽量详细清晰,告知客户端请求错在那。如果预定义不够,就自己扩展。
    5xx,不用太详细,为了安全,只告诉那部分出错,方便定位。
    501 Not Implemented”表示客户端请求的功能还不支持,和“即将开业,敬请期待”的意思差不多,不过具体什么时候“开业”就不好说了。

    “502 Bad Gateway”通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误,但具体的错误原因也是不知道的。

    “503 Service Unavailable”表示服务器当前很忙,暂时无法响应服务,我们上网时有时候遇到的“网络服务正忙,请稍后重试”的提示信息就是状态码 503。

    如请求少了query字段,自定义一个错误码440 ,文字描述中 说明缺少那个参数。
    展开

    作者回复: good。

    
    
  • ly
    2019-08-11
    个人对状态码使用的理解:
    就目前项目开发的过程中,状态码的使用对业务程序来说,基本上很少去利用,大致都是nginx、tomcat、spring等这些框架、中间件会返回一些状态码,例如接口不存在,框架会返回404,nginx配置有问题或者拒绝访问返回403或者502等状态码,一旦正确进入业务接口的时候,不管请求的用户id是否在用户库中存在、以及请求参数中是否缺少必要参数,都是返回200状态码,只是在body的json里面会返回自己特有的业务错误码,例如: {"code":-1,"message:"userid参数必须填写"}。
    整体来讲,开发业务的程序员很少会去思考该返回什么http状态码,不知道这样的开发过程是否标准?
    展开

    作者回复: 这也是web服务里的一种常见做法。

    因为http状态码很有限,而且含义不是很清楚,所以通常需要在body里返回额外的数据来说明更详细的错误原因,常用的就是json了。

    
    
  • Mr.Chen
    2019-08-08
    老师好,http://www.chrono.com/12-1?code=405 , 服务器怎么知道”code“是状态码关键字呢,或者说服务器上确实有地方管理参数关键字呢。谢谢。

    作者回复: 是在服务器端写l服务程序,具体在实验环境里就是lua脚本,可以看一下lua目录里对应的脚本文件,很容易理解。

    
    
我们在线,来聊聊吧