HTTP 响应行及响应状态码

响应行

响应行/状态行(status line):意思是服务器响应的状态。

响应报文里的起始行。

也由三部分组成

  1. 版本号:表示报文使用的 HTTP 协议版本,通常是 HTTP/1.1
  2. 状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误;
  3. 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因。

HTTP 响应行及响应状态码_第1张图片

Wireshark 抓包案例:

HTTP/1.1 200 OK
响应状态码

响应码规范:RFC6585 (2012.4)、RFC7231 (2014.6)

状态码是一个十进制数字,代表服务器对请求的处理结果。

“状态码”而不是“错误码”。也就是说,它的含义不仅是错误,更重要的意义在于表达 HTTP 数据处理的“状态

目前 RFC 标准里规定的状态码是三位数,所以取值范围就是从 000 到 999。目前 RFC 标准里总共有 41 个状态码,但状态码的定义是开放的,允许自行扩展。

RFC 标准把状态码分成了五类,用数字的第一位表示分类,而 0~99 不用,这样状态码的实际可用范围就大大缩小了,由 000~999 变成了 100~599。

这五类的具体含义是:

  • 1××:请求已接收到,需要进一步处理才能完成,HTTP1.0 不支持

    • 100 Continue:上传大文件前使用,由客户端发起请求中携带 Expect: 100-continue 头部触发

    • 101 Switch Protocols:协议升级使用,由客户端发起请求中携带 Upgrade: 头部触发,如升级 websocket 或者 http/2.0

    • 102 Processing:WebDAV 请求可能包含许多涉及文件操作的子请求,需要很长时间才能完成请求。该代码表示 服务器已经收到并正在处理请求,但无响应可用。这样可以防止客户端超时,并假设请求丢失

  • 2××:报文已经收到并成功处理请求

    • 200 OK:是最常见的成功状态码,表示成功返回响应。

    • 201 Created: 有新资源在服务器端被成功创建

    • 202 Accepted: 服务器接收并开始处理请求,但请求未处理完成。这样一个模糊的概念是有意如此设计,可以覆盖更多的场景。例如异步、需要长时间处理的任务。

    • 203 Non-Authoritative Information:当代理服务器修改了 origin server 的原始响应包体时(例如更换了HTML中的元素值),代理服务器可以通过修改
      200为203的方式告知客户端这一事实,方便客户端为这一行为作出相应的处理。203响应可以被缓存。

    • 204 No Content:含义与“200 OK”基本相同,成功执行了请求且不携带响应包体,并暗示客户端无需更新当前的页面视图

    • 205 Reset Content:成功执行了请求且不携带响应包体,同时指明客户端需要更新当前页面视图。

    • 206 Partial Content:是 HTTP 分块下载或断点续传的基础,在客户端发送“范围请求”、要求获取资源的部分数据时出现,它与 200 一样,也是服务器成功处理了请求,但 body 里的数据不是资源的全部,而是其中的一部分。状态码 206 通常还会伴随着头字段“Content-Range”,表示响应报文里 body 数据的具体范围,供客户端确认,例如“Content-Range: bytes 0-99/2000”,意思是此次获取的是总计 2000 个字节的前 100 个字节。

    • 207 Multi-Status:RFC4918 ,在 WEBDAV 协议中以 XML 返回多个资源的状态。

    • 208 Already Reported:RFC5842 ,为避免相同集合下资源在207响应码下重复上报,使用 208 可以使用父集合的响应码。

  • 3××:重定向,资源位置发生变动,需要客户端重新发送请求;重定向使用 Location 指向的资源或者缓存中的资源。在 RFC2068
    中规定客户端重定向次数不应超过 5 次,以防止死循环。

    • 300 Multiple Choices:资源有多种表述,通过 300 返回给客户端后由其自行选择访问哪一种表述。由于缺乏明确的细节,300 很少使用。
    • 301 Moved Permanently:俗称“永久重定向”,此次请求的资源已经不存在了,需要改用新的 URI 再次访问。资源永久性的重定向到另一个 URI 中。
    • 302 Found:俗称“临时重定向”(Moved Temporarily)资源临时的重定向到另一个 URI 中。
    • 303 See Other:重定向到其他资源,常用于 POST/PUT 等方法的响应中。
    • 304 Not Modified: 用于 If-Modified-Since 等条件请求,表示资源未修改,用于缓存控制。当客户端拥有可能过期的缓存时,会携带缓存的标识
      etag、时间等信息询问服务器缓存是否仍可复用,而304是告诉客户端可以
      复用缓存。
    • 307 Temporary Redirect:类似302,但明确重定向后请求方法必须与原请求方法相同,不得改变。
    • 308 Permanent Redirect:类似301,但明确重定向后请求方法必须与原请求方法相同,不得改变。
  • 4××:客户端错误,请求报文有误,服务器无法处理;

    • 400 Bad Request:服务器认为客户端出现了错误,但不能明确判断为以下哪种错误时使用此错误码。例如HTTP请求格式错误。
    • 401 Unauthorized:用户认证信息缺失或者不正确,导致服务器无法处理请求。
    • 407 Proxy Authentication Required:对需要经由代理的请求,认证信息未通过代理服务器的验证
    • 403 Forbidden:服务器理解请求的含义,但没有权限执行此请求
    • 404 Not Found:服务器没有找到对应的资源
    • 410 Gone:服务器没有找到对应的资源,且明确的知道该位置永久性找不到该资源
    • 405 Method Not Allowed:服务器不支持请求行中的 method 方法
    • 406 Not Acceptable:对客户端指定的资源表述不存在(例如对语言或者编码有要求),服务器返回表述列表供客户端选择。
    • 408 Request Timeout:服务器接收请求超时
    • 409 Conflict:资源冲突,例如上传文件时目标位置已经存在版本更新的资源
    • 411 Length Required:如果请求含有包体且未携带 Content-Length 头部,且不属于chunk类请求时,返回 411
    • 412 Precondition Failed:复用缓存时传递的 If-Unmodified-Since 或 If-None-Match 头部不被满足
    • 413 Payload Too Large/Request Entity Too Large:请求的包体超出服务器能处理的最大长度
    • 414 URI Too Long:请求的 URI 超出服务器能接受的最大长度
    • 415 Unsupported Media Type:上传的文件类型不被服务器支持
    • 416 Range Not Satisfiable:无法提供 Range 请求中指定的那段包体
    • 417 Expectation Failed:对于 Expect 请求头部期待的情况无法满足时的响应码
    • 421 Misdirected Request:服务器认为这个请求不该发给它,因为它没有能力处理。
    • 426 Upgrade Required:服务器拒绝基于当前 HTTP 协议提供服务,通过Upgrade 头部告知客户端必须升级协议才能继续处理。
    • 428 Precondition Required:用户请求中缺失了条件类头部,例如 If-Match
    • 429 Too Many Requests:客户端发送请求的速率过快,(一般不会返回429,而返回503)
    • 431 Request Header Fields Too Large:请求的 HEADER 头部大小超过限制
    • 451 Unavailable For Legal Reasons:RFC7725 ,由于法律原因资源不可访问
  • 5××:服务器错误,服务器在处理请求时内部发生了错误。

    • 500 Internal Server Error:服务器内部错误,且不属于以下错误类型
    • 501 Not Implemented:服务器不支持实现请求所需要的功能
    • 501 Not Implemented:服务器不支持实现请求所需要的功能
    • 503 Service Unavailable:服务器资源尚未准备好处理当前请求
    • 504 Gateway Timeout:代理服务器无法及时的从上游获得响应
    • 505 HTTP Version Not Supported:请求使用的 HTTP 协议版本不支持
    • 507 Insufficient Storage:服务器没有足够的空间处理请求
    • 508 Loop Detected:访问资源时检测到循环
    • 511 Network Authentication Required:代理服务器发现客户端需要进行身份验证才能获得网络访问权限

其中1xx、2xx、3xx 为成功响应吗,4xx、5xx 为失败响应码。

此外当客户端接受到它不认识的响应码时,将按照该响应吗所在系列的第一个响应码(x00)来处理

如客户端收到:577 将会以 500 来处理,其他类似

参考链接:

  • 极客时间:透视HTTP
  • 极客时间:Web协议详解与抓包实战

你可能感兴趣的:(计算机网络)