【博客368】HTTP常见状态码

tech2022-07-27  172

内容: 记录http常见状态码

5XX系列:

500 Internal Server Error 意味着所请求的服务器遇到意外的情况并阻止其执行请求。 这个错误代码是一个比较通用的“万能”响应代码。 501 Not Implemented 请求的方法不被服务器支持,因此无法被处理。只有GET和HEAD是要求服务器支持的, 它们必定不会返回此错误代码。 注意:你无法修复 501 错误,需要被访问的 web 服务器去修复该问题! 502 Bad Gateway 它表示作为网关或代理角色的服务器,从上游服务器中接收到的响应是无效的。 Gateway (网关)在计算机网络体系中可以指代不同的设备,502 错误通常不是客户端能够修复, 而是需要由途径的Web服务器或者代理服务器对其进行修复 503 Service Unavailable 它表示服务器尚未处于可以接受请求的状态。 通常造成这种情况的原因是: 由于服务器停机维护或者已超载。注意在发送该响应的时候,应该同时发送一个对用户友好的页面来 解释问题发生的原因。该种响应应该用于临时状况下,与之同时,在可行的情况下,应该在 Retry-After 首部字段中包含服务恢复的预期时间。 缓存相关的首部在与该响应一同发送时应该小心使用,因为 503 状态码通常应用于临时状况下, 而此类响应一般不应该进行缓存。 504 Gateway Timeout 表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应。 505 HTTP Version Not Supported 服务器不支持请求中所使用的HTTP协议版本。 506 Variant Also Negotiates 服务器有一个内部配置错误:对请求的透明内容协商导致循环引用。 507 Insufficient Storage 服务器有内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的 适当端点。 508 Loop Detected (WebDAV) 服务器在处理请求时检测到无限循环。 510 Not Extended 客户端需要对请求进一步扩展,服务器才能实现它。服务器会回复客户端发出扩展请求所需的 所有信息。 511 Network Authentication Required 指示客户端需要进行身份验证才能获得网络访问权限。 该状态码不是由源头服务器生成的,而是由控制网络访问的拦截代理服务器生成的。 网络运营商们有时候会在准许使用网络之前要求用户进行身份验证、接受某些条款,或进行其他 形式的与用户之间的互动(例如在网络咖啡厅或者机场)。他们通常用用户设备的 MAC 地址来 进行识别。

4XX系列:

400 Bad Request 语义有误(语法无效),当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交 这个请求。 401 Unauthorized 缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。 这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。 客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。 如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些 证书。这个状态类似于 403, 但是在401下,依然可以进行身份验证。 403 Forbidden 服务器已经理解请求,但是拒绝授权访问。 这个状态类似于 401,但进入该状态后不能再继续进行验证。该访问是长期禁止的,并且与应用 逻辑密切相关(例如不正确的密码)。 如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体 内返回拒绝的原因。 如果它不希望让客户端获得任何信息,服务器可以返回一个 404 响应。 404 Not Found 服务器端无法找到所请求的资源。 返回该响应的链接通常称为坏链(broken link) 或 死链(dead link),它们会导向链接出 错处理(link rot)页面。 404 状态码并不能说明请求的资源是临时还是永久丢失。 404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用 的情况下。 如果服务器知道该资源是永久丢失,那么应该返回 410 (Gone),来告知旧资源因为某些内部的 配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。 410 Gone 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。 这样的状况应当被认为是永久性的。 如果可能,拥有链接编辑功能的客户端应当在获得用户许可后删除所有指向这个地址的引用。如果服务 器不知道或者无法确定这个状况是否是永久的,那么就应该使用 404 状态码。除非额外说明,否则 这个响应是可缓存的。 405 Method Not Allowed 表明服务器禁止了使用当前 HTTP 方法的请求。需要注意的是,GET 与 HEAD 两个方法不得被 禁止,当然也不得返回状态码 405。 该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。 鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持 或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。 406 Not Acceptable 指代服务器端无法提供与 Accept-Charset 以及 Accept-Language 消息头指定的值相匹配 的响应。 如果服务器返回了这个错误状态码,那么消息体中应该包含所能提供的资源表现形式的列表,允许 用户手动进行选择。 在实际应用中,这个错误状态码极少使用:不是给用户返回一个晦涩难懂(且难以更正)的错误状 态码,而是将相关的消息头忽略,同时给用户提供一个看得见摸得着的页面。 407 Proxy Authentication Required 与401响应类似,只不过客户端必须在代理服务器上进行身份验证。 指的是由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server ) 要求的身份验证凭证,发送的请求尚未得到满足。 代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端可以返回一个 Proxy-Authorization 信息头用以验证。 408 Request Timeout 请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交 这一请求而无需进行任何更改。 表示服务器想要将没有在使用的连接关闭。一些服务器会在空闲连接上发送此信息,即便是在 客户端没有发送任何请求的情况下。 服务器应该在此类响应中将 Connection 首部的值设置为 “close”,因为 408 意味着 服务器已经决定将连接关闭,而不是继续等待。 这类响应出现的比较频繁,源于一些浏览器——例如 Chrome, Firefox 27+, 或者 IE9 等——使用 HTTP 协议中的预连接机制来加速上网体验。同时应该注意到,某些服务器会 直接关闭连接,而不发送此类消息。 409 Conflict 表示请求与服务器端目标资源的当前状态相冲突。 冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧, 从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。 该响应应当包含足够的信息以便用户发现冲突的源头。 这个代码只允许用在这样的情况下使用:用户被认为能够解决冲突,并且会重新提交新的请求。 411 Length Required 表示由于缺少确定的Content-Length 首部字段,服务器拒绝客户端的请求。 在添加了表明请求消息体长度的有效 Content-Length 头之后,客户端可以再次提交该请求。 412 Precondition Failed 对于目标资源的访问请求被拒绝。 这通常发生于采用除 GET 和 HEAD 之外的方法进行条件请求时,由首部字段 If-Unmodified-Since 或 If-None-Match 规定的先决条件不成立的情况下。这时候, 请求的操作——通常是上传或修改文件——无法执行,从而返回该错误状态码 428 Precondition Required 原始服务器要求该请求是有条件的。 旨在防止“丢失更新”问题,即客户端获取资源状态, 修改该状态并将其返回服务器,同时第三方修改服务器上的状态,从而导致冲突。 一般的,这种情况意味着必要的条件首部:如 If-Match的缺失。. 当一个条件首部的值不能匹配服务器端的状态的时候,应答的状态码应该是 412 Precondition Failed,前置条件验证失败。 413 Payload Too Large 表示请求主体的大小超过了服务器愿意或有能力处理的限度,服务器可能会(may)关闭连接以防止 客户端继续发送该请求。 如果“超出限度”是暂时性的,服务器应该返回 Retry-After 首部字段,说明这是暂时性的,以 及客户端可以在什么时间(after what time)后重试。 414 URI Too Long 表示客户端所请求的 URI 长度超过了服务器允许的范围,因此服务器拒绝对该请求提供服务。 以下是造成这种罕见情况的几种可能原因: 本应使用POST方法的表单提交变成了GET方法,导致查询字符串(Query String)过长。 当客户端堕入重定向循环黑洞时,例如,指向自身后缀的重定向URI前缀(a redirected URI prefix that points to a suffix of itself); 当客户端对服务器进行攻击,试图寻找潜在的漏洞时。 415 Unsupported Media Type 对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求 被拒绝。 格式问题的出现有可能源于客户端在 Content-Type 或 Content-Encoding 首部中指定 的格式,也可能源于直接对负载数据进行检测的结果。 416 Range Not Satisfiable 意味着服务器无法处理所请求的数据区间。 最常见的情况是所请求的数据区间不在文件范围之内,也就是说,Range 首部的值,虽然从 语法上来说是没问题的,但是从语义上来说却没有意义。 416 响应报文包含一个 Content-Range 首部,提示无法满足的数据区间(用星号 * 表示), 后面紧跟着一个“/”,再后面是当前资源的长度。例如:Content-Range: */12777 遇到这一错误状态码时,浏览器一般有两种策略:要么终止操作(例如,一项中断的下载操作被 认为是不可恢复的),要么再次请求整个文件。 417 Expectation Failed 意味着服务器无法满足 Expect 请求消息头中的期望条件。 421 Misdirected Request 该服务器未配置为针对包含在请求 URI 中的方案和权限的组合产生响应。该请求针对的是无法 产生响应的服务器。 422 Unprocessable Entity (WebDAV) 表示服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是服务器无法处理所包含 的指令。 重要提示:客户端不应在不修改的情况下重复发送此请求。 423 Locked (WebDAV) 正在访问的资源被锁定。 424 Failed Dependency (WebDAV) 由于先前的请求失败,所以此次请求失败。 425 Too Early 代表服务器不愿意冒风险来处理该请求,原因是处理该请求可能会被“重放”,从而造成潜在的 重放攻击。 426 Upgrade Required 表示服务器拒绝处理客户端使用当前协议发送的请求,但是可接受其使用升级后的协议发送的请求。 服务器会在426 响应中使用 Upgrade 首部来指定要求的协议。 429 Too Many Requests 表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。 在响应中,可以提供一个 Retry-After 首部来提示用户需要等待多长时间之后再发送新的请求。 431 Request Header Fields Too Large 表示由于请求中的首部字段的值过大,服务器拒绝接受客户端的请求。客户端可以在缩减首部字段的 体积后再次发送请求。 该响应码可以用于首部总体体积过大的情况,也可以用于单个首部体积过大的情况。 这种错误一般不会出现于经过良好测试的投入使用的系统当中,而是更多出现于测试新系统的时候。 451 Unavailable For Legal Reasons(因法律原因不可用) 表示服务器由于法律原因,无法提供客户端请求的资源,例如可能会导致法律诉讼的页面。

3XX系列:

301 Moved Permanently、308 Permanent Redirect 请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。 浏览器会重定向到这个URL,同时搜索引擎也会更新其链接(用 SEO 的行话来说,意思是链接 被传递到了新的 URL)。 在重定向过程中,308请求方法和消息主体不会发生改变,如果在第一个请求中使用 POST,则 必须在第二个请求中使用 POST,然而在返回 301 状态码的情况下,请求方法有时候会被客户 端错误地修改为 GET 方法。 302 Found、307 Temporary Redirect 请求的资源被暂时的移动到了由Location 头部指定的 URL 上。 浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新。 请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有 地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是 可缓存的。 在确实需要将重定向请求的方法转换为 GET的场景下,可以使用 303 See Other。 例如在使用 PUT 方法进行文件上传操作时,需要返回确认信息(例如“你已经成功上传了xyz”) 而不是上传的资源本身,就可以使用这个状态码。 总结:即使规范要求浏览器在重定向时保证请求方法和请求主体不变,但并不是所有的用户代理 都会遵循这一点。 所以推荐仅在响应 GET 或 HEAD 方法时采用301302 状态码,而在其他时候使用 307308 来替代,因为在这些场景下方法变换是明确禁止的。 303 See Other 重定向链接指向的不是新上传的资源,而是另外一个页面。 比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET。 通常作为 PUT 或 POST 操作的返回结果。 304 Not Modified 未改变。 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者 根据请求的条件)并没有改变,则服务器应当返回这个状态码。 说明无需再次传输请求的内容,也就是说可以使用缓存的内容。 这通常是在一些安全的方法(safe),例如GET 或HEAD 或在请求中附带了头部信息: If-None-Match 或 If-Modified-Since。 如果是 200 OK ,响应会带有头部 Cache-Control, Content-Location, Date, ETag, Expires,和 Vary. 300 Multiple Choice 表示该请求拥有多种可能的响应。用户或浏览器能够自行从中选择一个首选的地址进行重定向。 假如服务器可以提供一个优先选择,那么它应该生成一个 Location 首部。 由于没有如何进行选择的标准方法,这个状态码极少使用。

2XX系列:

200 OK 请求成功。成功的含义取决于HTTP方法: GET:资源已被提取并在消息正文中传输。 HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。 TRACE:消息正文包含服务器收到的请求消息 PUT 和 DELETE 的请求成功通常并不是响应200 OK的状态码而是 204 No Content 表示无 内容(或者 201 Created表示一个资源首次被创建成功)201 Created 表示请求已经被成功处理,并且创建了新的资源。 这通常是在POST请求,或是某些PUT请求之后返回的响应。 新的资源在应答返回之前已经被创建。同时新增的资源会在应答消息体中返回,其地址是原始请求的 路径或者是 Location 首部的值。 202 Accepted 表示服务器端已经收到请求消息,但是尚未进行处理。 但是稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。该状态码适用 于将请求交由另外一个进程或者服务器来进行处理,或者是对请求进行批处理的情形。 203 Non-Authoritative Information 表示服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是 来自本地或者第三方的拷贝。 当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信 息的超集。 使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。 204 No Content 表示该请求已经成功了,但是客户端客户不需要离开当前页面。 默认情况下 204 响应是可缓存的。一个 ETag 标头包含在此类响应中。 使用惯例是: 在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回 204 No Content。 如果创建了资源,则返回 201 Created 。 如果应将页面更改为新更新的页面,则应改用 200205 Reset Content 用来通知客户端重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面。 与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。 206 Partial Content 服务器已经成功处理了部分 GET 请求。 类似于 FlashGet 或者迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将 一个大文档分解为多个下载段同时下载。 该请求必须包含 Range 头信息来指示客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。 如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型, 同时包含 Content-Range 首部。 包含多个数据区间,那么整个响应的Content-Type首部的值为multipart/byteranges, 其中一个片段对应一个数据区间,并提供 Content-Range 和 Content-Type 描述信息。 207 Multi-Status (WebDAV) 代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的 响应代码。由WebDAV(RFC 2518)扩展的状态码. 226 IM Used (HTTP Delta encoding) 服务器已经完成了对资源的 GET 请求,并且响应是对当前实例应用的一个或多个实例操作结果的 表示。
最新回复(0)