学习笔记:HTTP 消息的响应码
文章素材来源是极客时间上的《Web 协议详解与抓包实战》,有着 100 多节的视频课,但越看越觉得有意思,解决了很多之前一知半解的问题。没有输出、不知道怎么写的问题其实很简单,就是没有输入;另外我也很推崇“文字实践”:从别人那里学到的新的认知一定要写成文章,只有写出来,才能真正领悟和掌握。
题图:来自一个赛博朋克风的科幻小游戏:VA-11 Hall-A:Cyberpunk Bartender Action
-------------------------------------------------分割线----------------------------------------------------
HTTP 消息的响应码,通常可以分为表示成功的 1xx、2xx、3xx 系列响应码,和表示错误的 4xx、5xx 系列,官方定义的是一个 3 位的数字,比如大家最熟悉的”404 not found“,404 就是一个响应码。
上图中就是一个 HTTP 消息的响应行格式。最前面的是 HTTP 版本号,通常有 1.0、1.1 和 2.0,比较常见的是 1.1;之后的 status code 就是响应码,status message 则是描述信息。其实说到 http 的响应行,可以再多聊一聊请求行,如下图所示,”GET“代表请求的方法,常见的还有 put/post 等等,中间这个”/“则是 request-target,代表着向服务器发送请求时的路径,路径为空时则必须传递”/“这个符号
1.”1xx“系列
以 1 为开头的响应码表示请求已经收到,需要进一步处理才能完成,HTTP1.0 不支持。
100 Continue:客户端上传大文件前请使用,携带 Expect:100-continue 头部触发;
101 Switch Protocols:协议升级使用;例如客户端支持 http 2.0 或 Web socket,发起的请求中携带 Upgrade 字段告诉服务器,如果服务器也支持的话就会回复此字段。
102 processing:针对 WebDAV,该请求可能包含许多涉及文件操作的子请求,需要较长时间才能完成,该代码表示服务器已经收到了请求正在处理。
2.2xx 成功处理请求
200 OK:成功后的返回响应
201 Created:有新资源在服务器端被成功创建
202 Accepted:服务器接收并开始处理请求,但请求并未处理完成。例如异步、需要长时间处理的任务。
204 No Content:成功执行了请求且不携带响应包体,并暗示客户端无需更新当前的页面视图
205 Reset Content:成功执行了请求且不携带响应包体,并指明客户端需要更新当前的页面视图
206 partial Content:使用 range 协议时返回部分响应内容的响应码
207 Multi-Status:RFC4918,在 WEBDAV 协议中以 XML 返回多个资源的状态
208 Already Reported:RFC58842,为避免相同集合下资源在 207 响应码下重复上报,使用 208 可以使用父集合的响应码。
PS:后面三个响应码暂时我了解不多,所以没有加粗,仅供参考
3.3xx 重定向
重定向使用 Location 指向的资源或缓存中的资源,客户端重定向次数不应超过 5 次,以防止死循环。
300 Multiple Choices:资源有多种表述,通过 300 返回给客户端有其选择,较少使用。
301 Moved Permanently:资源永久性的重定向到另一个 URI 中
302 Found:资源临时的重定向到另一个 URI 中
303 See Other:重定向到其他资源,常用于 POST/PUT 等方法的响应中
304 Not Modified:当客户端拥有可能过期的缓存时,会询问服务器缓存是否仍可复用,304 是告诉客户端可以复用
307 Temporary Redirect:类似 302,但明确重定向后请求方法必须与原请求方法相同
308 Permanent Redirect:类似 301,但明确重定向后请求方法必须与原请求方法相同
4.4xx 表示客户端出现错误
400 Bad Request:服务器认为客户端出现了错误,但不能判断为以下具体哪种错误
401 Unauthorized:未鉴权,用户认知信息缺失或不正确
403 Forbidden:服务器理解请求的含义,但没有权限执行此请求
404 Not Found:服务器没有找到对应的资源
405 Method Not Allowed:服务器不支持请求行中的 method 方法
406 Not Acceptable:对客户端请求的资源表述不存在(例如对语言或编码有要求),服务器返回表述列表供客户端选择
407 proxy Autjentication Required:认证信息未通过代理服务器的验证
408 Request Timeout:服务器接收请求超时
409 Conflict:资源冲突(如上传文件时目标位置已经有更新的资源)
410 Gone:服务器没有找到资源且知道该位置永久性找不到
411 Length Required:如果请求含有包体且未携带 Content-Length 头部,且不属于 chunk 类请求时,返回 411
412 Precondition Failed:复用缓存时传递的 if-Unmodified-Since 或 if-None-Match 头部不被满足
413 Payload Too Large:请求的包体超出服务器能处理的最大长度
414 URI Too Long:请求的 URI 超出服务器能接收的最大长度
415 Unsupported Media Type:上传的文件类型不被服务器支持
416 Range Not Satisfiable:无法提供 Range 请求中指定的那段包体
417 Expectation Failed:对于 Expect 请求头部期待的情况无法满足
421 Misdirect Request:服务器认为这个请求不该发给它,因为没有能力处理
426 Upgrade Required:服务器拒绝基于当前 HTTP 协议提供服务
428 Precondition Required:用户请求中缺失了条件类头部(例如 If-match)
429 Too Many Request:客户端发送请求的速度过快
431 Request Header Fields Tool Lagre:请求的 header 头部大小超过限制
451 Unavailable For Legal Reasons:法律原因资源不可访问
5.5xx 表示服务器端出现错误
500 Internal Server Error:服务器内部错误,且不属于以下错误
501 Not Implemented:服务器不支持实现请求所需要的功能
502 Bad Gateway:代理服务器无法获取到合法响应(网络连接不上)
503 Service Unavailable:服务器资源尚未准备好处理当前请求
504 Gateway Timeout:代理服务器无法及时的从上游获得相应
505 HTTP Version Not Supported:请求使用的 HTTP 协议版本不支持
507 Insufficient Storage:服务器没有足够的空间处理请求
508 Loop Detected:访问资源时检测到循环
511 Network Authentication Required:代理服务器发现客户端需要身份验证才能获得网络访问权限
评论