http协议:三 (5)响应状态码应该怎么用
“状态码”而不是“错误码”。也就是说,它的含义不仅是错误,更重要的意义在于表达 HTTP 数据处理的“状态”,客户端可以依据代码适时转换处理状态,例如继续发送请求、切换协议,重定向跳转等
1、version【SP】status code【SP】reason【CRLF】
version:是HTTP协议的版本号,用处不大
reason:是原因短语,简短的文字描述,如果“OK”“Not Found”等等,也可以自定义,用处也不大,很多客户端会忽略,为了兼容早期的文本客户端
status code:状态码,不是错误码,表达状态。以代码的形式表示服务器对请求的处理结果。
2、状态码
RFC标准规定状态码是三位数,把状态码分成了五类,用数字的第一位表示分类。
* 1xx:提示信息,表示目前是协议处理的中间状态,还需要后续的操作;
* 2xx: 成功,报文已经收到并被正确处理;
* 3xx:重定向,资源位置发生变动,需要客户端重新发送请求;
* 4xx:客户端错误,请求报文有误,服务器无法处理;
* 5xx:服务器错误,服务器在处理请求时内部发生了错误。
1xx
此类属于提示信息,是协议处理的中间状态,实际能够用到的时候很少。
101 Swiching Protocols 意思是客户端使用Upgrade头字段,要求在HTTP协议基础上改成其他协议继续通信,比如WebSocket,如果服务器统一变更协议,就会返回101,后续数据传输就不会再使用HTTP了。
2xx
此类表示服务器收到并成功处理了客户端的请求,客户端最喜欢的状态码。
200 ok 浏览器最喜欢的成功了;
202 Accepted 浏览器收到请求,但暂缓处理,暂时无法给出处理结果;最终结果不确定爬虫经常会出现
204 No Content 含义与200 OK基本相同,但响应头后没有body数据;
206 Particl Content 意思是服务器成功处理了请求,但body里的数据不是资源的全部,而是一部分,这个是HTTP分块下载或断点续传的基础,在客户端放松了“范围请求”、要求获取资源的部分数据时出现。一般206后会跟着头字段“Content-Range”,表示body里数据的具体范围,例如“Content-Range:bytes 0-99/2000”。
3xx
此类表示客户端请求的资源发生了改动,客户端必须用新的URI创新发送请求获取资源,也就是通常所说的”重定向“,包括注明的301、302跳转。
301 Moved Permanently 俗称“永久重定向”,含义是此次请求的资源已经不存在了,需要该用新的URI再次访问。
302 Found 俗称“临时重定向”,意思是请求的资源还在,但需要暂时用了一个URI来访问。
304 Not Modified 即“缓存重定向”,用于If-Modified-Since等条件请求,表示资源未修改,用于缓存控制。它不具有通常的跳转含义。
4xx
此类表示客户端发送的请求报文有无,服务器无法处理,含义就是“错误码”。
400 Bad Request 含义就是数据格式有误,具体哪里错误没有明说,会让客户端一头雾水,开发WEB应用时应该尽量避免;
403 Forbidden 这个不是客户的的请求出错,而是服务器禁止访问资源。愿意多种多样,可能是信息敏感、法律禁止等;
404 Not Found 被滥用的状态码,愿意是请求的资源在服务器上找不到,但很多服务器动不动就给你来个404;
405 Method Not Allowed 不允许使用某些方法操作资源,例如不允许POST只允许GET;
406 Not Acceptable 资源无法满足客户端请求的条件,例如请求中文但只有英文;
408 Request Timeout 请求超时,服务器等待了过长的时间;
409 Conflict 多个请求发生了冲突,可以理解为多线程并发时的竞争状态;
413 Request Enitity Too Large 请求报文里的body太大;
414 Request-URI Too Long 请求行里的URI太长;
429 Too Many Requests 客户端发送了太多请求,通常是由于服务器的限制连接策略;
431 Request Header Fields Too Large 请求头某个字段或总体太大。
5xx
此类表示客户端请求报文正确,但服务器在处理时内部发生了错误,无法返回应有的响应数据,是服务器端的“错误码”。
500 Internal Server Error 相当于服务器端的400,属于通用错误码,不利于调试,但能够防止黑客窥探或分析;
501 Not Implemented 表示客户端请求的功能还不支持;
502 Bad Gateway 通常是服务器作为王冠或者代理是返回的错误码,表示服务器自身工作正常,访问后端服务器时发生错误,具体错误原因未知;
503 Service Unavailable 服务器繁忙,当前不可用,这是一个临时的状态,通常503的响应报文里会有一个“Retry-After”字段,意思是多久后再重试。
问题
1、客户端的请求参数有问题,无法识别,这时候服务端该如何返回呢?
回复:
服务器可以返回4xx错误,然后在body中用json等格式说明具体的错误原因
5xx,不用太详细,为了安全,只告诉那部分出错,方便定位。
浙公网安备 33010602011771号