HTTP 报文 之 HTTP 状态码

如前面所示,HTTP 状态码被分成了五大类。本节对这五类 HTTP 状态码中的每一类都进行了总结。

100~199——信息性状态码

HTTP/1.1 向协议中引入了信息性状态码。这些状态码相对较新,关于其复杂性和感知价值存在一些争议,而受到限制。

状态码 原因短语 含义
100 Continue  说明收到了请求的初始部分,请客户端继续。发送了这个状态码之后,服务器在收到请求之后必须进行响应。更多信息请参见附录 C 中的 Expect 首部介绍。
101 Switching Protocols 说明服务器正在根据客户端的指定,将协议切换成 Update 首部所列的协议。

客户端与 100 Continue 

如果客户端在向服务器发送一个实体,并且愿意在发送实体之前等待 100 Continue 响应,那么,客户端就要发送一个携带了值为 100 Continue 的 Expect 请求首部(参见附录C)。如果客户端没有发送实体,就不应该发送 100 Continue Expect 首部,因为这样会使服务器误以为客户端要发送一个实体。

服务器与 100 Continue

如果服务器收到了一条带有值为 100 Continue 的 Expect 首部的气你去,它会用 100 Continue 响应或一条错误码来进行响应。服务器永远也不应该向没有发送 100 Continue 期望的客户端发送 100 Continue 状态码。

如果出于某种原因,服务器在有机会发送 100 Continue 响应之前就收到了部分(或全部)的实体,就说明客户端已经决定继续发送数据了,这样,服务器就不需要发送这个状态码了。但服务器读完请求之后,还是应该为请求发送一个最终的状态码(它可以跳过 100 Continue 状态)。

代理与 100 Continue

如果代理从客户端收到了一条带有 100 Continue 期望的请求,它需要做几件事情。如果代理知道下一跳服务器是 HTTP/1.1 兼容的,或者并不知道下一跳服务器与哪个版本兼容,它都应该将 Expect 首部放在请求中向下转发。如果它知道下一跳服务器只能与 HTTP/1.1 之前的版本兼容,就应该以 417 Expectation Failed 错误进行响应。

如果代理决定代表与 HTTP/1.0 或之前版本兼容的客户端,在其请求中放入 Expect 首部和 100 Continue 值,那么,(如果它从服务器收到了 100 Continue 响应)它就不应该将 100 Continue 响应转发给客户端,因为客户端可能不知道该拿他怎么办。

200 ~ 299 —— 成功状态码

客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求。

状态码 原因短语 含义
200 OK 请求没问题,实体的主体部分包含了所请求的资源。
201 Created 用于创建服务器对象的请求(比如,PUT)。响应的实体主体部分中应该包含各种引用了已创建的资源的URL,Location 首部包含的则是最具体的引用。服务器必须在发送这个状态码之前创建好对象。
202 Accepted 请求已被接受,但服务器还未对其执行任何动作。不能保证服务器会完成这个请求;这只是意味着接受请求时,它看起来是有效的。服务器应该在实体的主体部分包含对请求状态的描述,或许还应该有对请求完成时间的估计(或者包含一个指针,指向可以获取此信息的位置)。
203 Non-Authoritative Information
实体首部包含的信息不是来自于源端服务器,而是来自资源的一份副本。如果中间节点上有一份资源副本,但无法或者没有对它所发送的资源有关的元信息(首部)进行验证,就会出现这种情况。

这种响应码并不是非用不可的;如果实体首部来自源端服务器,响应为200状态的应用程序就可以将其作为一种可选项使用。

204 No Content 响应报文中包含若干首部和一个状态行,但没有实体的主体部分。主要用于在浏览器不转为显示新文档的情况下,对其进行更新(比如刷新一个表单页面)。
205 Reset Content 另一个主要用于浏览器的代码。负责告知浏览器清除当前页面中的所有 HTML 表单元素
206 Partial Content 
成功执行了一个部分或 Range 请求。稍后我们会看到,客户端可以通过一些特殊的首部来获取部分或某个范围内的文档 —— 这个状态码就说明范围请求成功了。

206 响应中必须包含 Content-Range、Date 以及 ETag 或 Content-Location 首部。

300 ~ 399 —— 重定向状态码

重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。如果资源已被移动,可以发送一个重定向状态码和一个可选的 Location 首部来告知客户端资源已被移走,以及现在可以在哪里找到它。

可以通过某些重定向状态码对资源的应用程序本地副本与源端服务器上的资源进行验证。比如,HTTP 应用程序可以查看其资源的本地副本是否仍然是最新的,或者在源端服务器上资源是否被修改过。

客户端发送了一个特殊的 If-Modified-Since 首部,说明只读取 1997 年 10 月之后修改过的文档。这个日期之后,此文档并未修改过,因此,服务器回送了一个 304 状态码,而不是文档的内容。

总之,在对那些包含了重定向状态码的非 HEAD 请求进行响应时,最好要包含一个实体,并在实体中包含描述信息和指向(多个)重定向 URL 的连接。

状态码 原因短语 含义
300 Multiple Choices 客户端请求一个实际指向多个资源的 URL 时会返回这个状态码,比如服务器上有某个 HTML 文档的英语和法语版本。返回这个代码时会带有一个选项列表;这样用户就可以选择他希望使用的那一项了,有多个版本可用时,客户端需要沟通解决,更多于此有关的信息请参见第17章。服务器可以在 Location 首部包含首选的 URL
301 Moved Permanently 在请求的 URL 已被移除时使用。响应的 Location 首部中应该包含资源现在所处的 URL 
302 Found 与 301 状态码类似;但是,客户端应该使用 Location 首部给出的 URL 来临时定位资源。将来的请求仍应使用老的 URL 
303 See Other 告知客户端应该用另一个 URL 来获取资源。新的 URL 位于响应报文的 Location 首部。其主要目的是允许 POST 请求的响应将客户端定向到某个资源上去。
304 Not Modified  客户端可以通过所包含的请求首部,使其请求变成有条件的。更多有关条件首部的内容请参见第三章。如果客户端发起了一个条件 GET 请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未被修改。带有这个状态码的响应不应该包含实体的主体部分。
305 Use Proxy 用来说明必须通过一个代理来访问资源;代理的位置由 Location 首部给出。很重要的一点是,客户端是相对某个特定资源来解析这条响应的,不能假定所有请求,甚至所有对持有所请求资源的服务器的请求都通过这个代理进行。如果客户端错误地让代理介入了某条请求,可能会引发破坏性的行为,而且会造成安全漏洞。
306 (未使用) 当前未使用
307 Temporary Redirect 与 301 状态码类似;但客户端应该使用 Location 首部给出的 URL 来临时定位资源。将来的请求应该使用老的 URL

当 HTTP/1.0 客户端发起一个 POST 请求,并在响应中收到 302 重定向状态码时,它会接受 Location 首部的重定向 URL,并向那个 URL 发起一个 GET 请求(而不会像原始请求中那样发起 POST 请求)。

问题出在 HTTP/1.1。HTTP/1.1 规范使用 303 状态码来实现同样的行为(服务器发送 303 状态码来重定向客户端的 POST 请求,在它后面跟上一个 GET 请求)。

为了避开这个问题, HTTP/1.1 规范指出,对于 HTTP/1.1 客户端,用 307 状态码取代 302 状态码来进行临时重定向。这样服务器就可以将 302 状态码保留起来,为 HTTP/1.0 客户端使用了。

这样一来,服务器要选择适当的重定向状态码放入重定向响应中发送,就需要查看客户度的 HTTP 版本了。

400 ~ 499 —— 客户端错误状态码

有时客户端会发送一些服务器无法处理的东西,比如格式错误的请求报文,或者最常见的是,请求一个不存在的 URL。

状态码 原因短语 含义
400 Bad Request 用于告知客户端它发送过来一个错误的请求
401 Unauthorized  与适当的首部一同返回,在这些首部中请求客户端在获取对资源的访问权之前,对自己进行认证。
402 Payment Required 现在这个状态码还未使用,但已经被保留,以作未来之用。
403 Forbidden 用于说明请求被服务器拒绝了。如果服务器想说明为什么拒绝请求,可以包含实体的主体部分来对原因进行描述。但这个状态码通常是在服务器不想说明拒绝原因的时候使用的
404 Not Found 用于说明服务器无法找到所请求的 URL。通常会包含一个实体,以便客户端应用程序显示给用户看。
405 Method Not Allowed 发起的请求中带有所请求的 URL 不支持的方法时,使用此状态码。应该在响应中包含 Allow 首部,以告知客户端对所请求的资源可以使用哪些方法。
406 Not Acceptable 客户端可以指定参数来说明他们愿意接收什么类型的实体。服务器没有与客户端可接受的 URL 相匹配的资源时,使用此代码。通常,服务器会包含一些首部,以便告知客户端弄清楚什么请求无法满足。
407 Proxy Authentication Required 与 401 状态码类似,但用于要求对资源进行认证的代理服务器。
408 Request Timeout 如果客户端完成请求所花的时间太长,服务器可以回送此状态码,并关闭连接。超时时长随服务器的不同而不同,但通常对所有的合法请求来说,都是够长的。
409 Conflict 用于说明请求可能在资源上引发的一些冲突。服务器担心请求会引发冲突时,可以发送此状态码。响应中应该包含描述冲突的主体。
410 Gone  与 404 类似,只是服务器曾经拥有过此资源。主要用于 Web 站点的维护,这样服务器的管理者就可以在资源被移除的情况下通知客户端了。
411 Length Required  服务器要求在请求报文中包含 Content-Length 首部时使用。更多关于 Content-Length 首部的信息请参见 3.5.4 节。
412 Precondition Failed  客户端发起了条件请求,且其中一个条件失败了的时候使用。客户端包含了 Expect 首部时发起的就是条件请求。更多有关 Expect 首部的内容请参见附录 C 中 Expect 部分
413 Request Entity Too Large 客户端发送的实体主体部分比服务器能够或者希望处理的要大时,使用此状态码
414 Request URI Too Long 客户端所发请求中的请求 URL 比服务器能够或者希望处理的要长时,使用此状态码
415 Unsupported Media Type  服务器无法理解或无法支持客户端所发实体的内容类型时,使用此状态码
416 requested Range Not Satisfiable 请求报文所请求的是指定资源的某个范围,而此范围无效或者无法满足时,使用此状态码。
417 Expectation Failed
请求的 Expect 请求首部包含了一个期望,但服务器无法满足此期望时,使用此状态码。

如果代理或者其他中间应用程序有确切证据说明源服务器会为某请求产生一个失败的期望,就可以发送这个响应状态码。

500 ~ 599 —— 服务器错误状态码

有时客户端发送了一条有效请求,服务器自身却出错了。这可能是服客户端碰上了服务器的缺陷,或者服务器上 子元素,比如某个网关资源,出了错。

状态码 原因短语 含义
500 Internal Server Error 服务器遇到了一个妨碍它为请求服务的错误时,使用此状态码。
501 Not Implemented 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码
502 Bad Gateway 作为代理或网关使用的服务器从请求响应链的下一跳连路上收到了一条伪响应(比如,它无法连接到其父网关)时,使用此状态码
503 Serivce Unavailable 用来说明服务器现在无法为请求提供服务,但将来可以。如果服务器知道什么手资源会变成可用的,可以在响应中包含一个 Retry-After 首部。更多有关 Retry-After 首部的信息请参见 3.5.3 节。
504 Gateway Timeout 与状态码 408 类似,只是这里的响应来自一个网关或代理,它们在等待另一服务器对其请求进行响应时超时了
505 HTTP Version Not Supported 服务器收到的请求使用了它无法或不愿支持的协议版本时,使用此状态码。有些服务器应用程序会选择不支持协议的早期版本
时间: 2025-01-10 20:10:14

HTTP 报文 之 HTTP 状态码的相关文章

http的报文结构和状态码的含义

HTTP响应报文解剖 响应报文结构 HTTP的响应报文也由三部分组成(响应行+响应头+响应体): 以下是一个实际的HTTP响应报文: ①报文协议及版本: ②状态码及状态描述: ③响应报文头,也是由多个属性组成: ④响应报文体,即我们真正要的“干货”. 响应状态码 和请求报文相比,响应报文多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果. HTTP的响应状态码由5段组成: 1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急... 2xx 处理成功,一般表示:请

HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET /data/info.html HTTP/1.1 方法字段就是HTTP使用的请求方法,比如常见的GET/POST 其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别: HTTP1.0对于每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Ho

Http报文 状态码

一.HTTP报文 1.HTTP报文介绍 HTTP报文:用于HTTP协议交互的信息. HTTP报文由报文头部和报文主体(非必须)构成,中间由空行来分隔. 1.1 请求报文:客户端发起的报文. 1).报文头部: (1)请求行:包含请求的方法,URI和HTTP版本号. (2)请求头部字段. (3)通用头部字段 (4)实体头部字段 2).空行 3).报文主体 1.2.响应报文:服务单响应的报文. 1).报文头部: (1)状态行:包含表示请求响应的状态码,原因短语,和HTTP版本. (2)响应头部字段.

(第三章,第四章)http报文内的http信息,返回结果的http状态码

第三章 http报文内的http信息 用于http协议交互的信息被称为http报文,包括请求报文和响应报文. 1.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的,会消耗更多的cpu资源. 2.压缩传输的内容编码: 内容编码后的实体由客户端接受并负责解码. 3.分割发送的分块传输编码 在传输大量数据时,通过数据分割成多块,能够让浏览器逐步显示页面. 4.获取部分内容的范围请求: 可以处理大文件突然下载中断的问题. 5.内容协商返回最合适的内容 比如根据浏览器

响应报文的状态码

响应报文的状态码 状态码用来告诉HTTP客户端HTTP服务器是否产生了预期的response.状态码总共只有三位,第一位表示状态类别,总共分五种. (1) 1xx: 是进度通知类状态,意思就是说"请求我已经收到了,或你的请求我正在处理". (2) 2xx: 表示"你的请求我已经成功处理了". (3) 3xx: 即重定向,也就是服务器告诉客户端"你要的资源搬家了,你到某某地方再去找它吧". (4) 4xx: 客户端发来的响应报文里有些错误,比如语法

《图解Http》 2-6章: 基础,报文,状态码,首部。

HTTP协议和Cookie 是stateless协议,自身不对请求和响应之间的通信状态进行保存.但随着技术发展,为了实现保存状态的功能,引入了Cookie技术. Cookie在请求和响应报文中写入信息来控制客户端的状态. Cookie根据从服务器发送的响应报文内的Set-Cookie的首部字段信息,通知客户端保存Cookie. 下次客户端发送请求时,会在报文中加入Cookie值. 服务器收到报文后,检查Cookie,确认是哪个客户端发过来的连接请求,然后再对比服务器上的记录,得到之前的状态信息.

HTTP协议(8)HTTP响应报文和状态码

对于HTTP响应报文,比较重要的信息主要有两部分,一部分是响应行中的状态码,另一部分是响应头.下面分别介绍.响应头信息中比较重要的部分: (1) Server,服务端所使用的Web服务名称,如:Server:Apache/1.3.6(Unix). (2) Set-Cookie:服务器向客户端设置的Cookie. (3) Last-Modified,服务器通过这个域告诉客户端浏览器,资源的最后修改时间. (4) Location:重定向用户到另一个页面,比如身份认证通过之后就会转向另一个页面.这个

HTTP权威指南-报文与状态码

所有的报文都向下流动 报文流向 报文组成 HTTP方法 状态码 GET示例 HEAD示例 100~199 信息性状态码 200~299 成功状态码 300~399重定向状态码 400~499 客户端错误 500~599 服务器端错误 原文地址:https://www.cnblogs.com/jiqing9006/p/11116653.html

【http】http的方法,状态码和组成部分

Http(Hypertext Transfer Protocol) HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议.它可以使浏览器更加高效,使网络传输减少.它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等. 用于http协议交互的信息被称为http报文.请求端(客户端)的http报文叫做请求报文,响应端(服务器)的叫做响应报文. 请求报文由请