HTTP状态码

HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。在此记录一下各个状态码的含义。

一、HTTP状态码的分类

  • 1XX 信息,服务器收到请求,需要请求者继续执行操作
  • 2XX 成功,操作被成功接收并处理
  • 3XX 重定向,需要进一步的操作以完成请求
  • 4XX 客户端错误,请求包含语法错误或无法完成请求
  • 5XX 服务器错误,服务器在处理请求的过程中发生了错误

二、常见状态码

200("OK")

一切正常。实体主体中的文档(若存在的话)是某资源的表示。

400("Bad Request")

客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。

500("Internal Server Error")

服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。

301("Moved Permanently")

当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。

404("Not Found") 和410("Gone")

当客户端所请求的URI不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。

409("Conflict")

当客户端试图执行一个”会导致一个或多个资源处于不一致状态“的操作时,发送此响应代码。

三、状态码集合

1XX:通知

1XX系列响应代码仅在与HTTP服务器沟通时使用。

100("Continue")

重要程度:中等,但(写操作时)很少用。
继续。客户端应继续其请求

101("Switching Protocols")

重要程度:非常低。
切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议

2XX: 成功

2XX系列响应代码表明操作成功了。

200("OK")

重要程度:非常高。
请求成功,一般来说,这是客户端希望看到的响应代码。它表示服务器成功执行了客户端所请求的动作,并且在2XX系列里没有其他更适合的响应代码了。一般用于GET与POST请求。

201("Created")

重要程度:高。
当服务器依照客户端的请求创建了一个新资源时,发送此响应代码。

202("Accepted")

重要程度:中等。
已接受。已经接受请求,但未处理完成。也就是说客户端的请求无法或将不被实时处理。请求稍后会被处理。请求看上去是合法的,但在实际处理它时有出现问题的可能。
若一个请求触发了一个异步操作,或者一个需要现实世界参与的动作,或者一个需要很长时间才能完成且没必要让Web客户端一直等待的动作时,这个相应代码是一个合适的选择。

203("Non-Authoritative Information")

重要程度:非常低。
非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本。

204("No Content")

重要程度:高。
无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档。服务器也可以对GET请求返回此响应代码,这表明“客户端请求的资源存在,但其表示是空的”。注意与304("Not Modified")的区别。204常常用在Ajax应用里。服务器通过这个响应代码告诉客户端:客户端的输入已被接受,但客户端不应该改变任何UI元素。

205("Reset Content")

重要程度:低。
重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域

206("Partial Content")

重要程度:对于支持部分GET(partial GET)的服务而言“非常高”,其他情况下“低”。
它跟200类似,但它用于对部分GET请求(即使用Range请求报头的GET请求)的响应。部分GET请求常用于大型二进制文件的断点续传。

3XX 重定向

3XX系列响应代码表明:客户端需要做些额外工作才能得到所需要的资源。它们通常用于GET请求。他们通常告诉客户端需要向另一个URI发送GET请求,才能得到所需的表示。那个URI就包含在Location响应报头里。

300("Multiple Choices")

重要程度:低。
多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。

301("Moved Permanently")

重要程度:中等。
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。

302("Found")

重要程度:应该了解,特别市编写客户端时。但我不推荐使用它。
临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。

303("See Other")

重要程度:高。
查看其它地址。与301类似。使用GET和POST请求查看

304("Not Modified")

重要程度:高。
未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源

305("Use Proxy")

重要程度:低。
使用代理。所请求的资源必须通过代理访问。

306 未使用

重要程度:无
已经被废弃的HTTP状态码。

307("Temporary Redirect")

重要程度:高。
临时重定向。与302类似。使用GET请求重定向。

4XX:客户端错误

这些响应代码表明客户端出现错误。不是认证信息有问题,就是表示格式或HTTP库本身有问题。客户端需要自行改正。

400("Bad Request")

重要程度:高。
客户端请求的语法错误,服务器无法理解。

401("Unauthorized")

重要程度:高。
请求要求用户的身份认证。

402("Payment Required")

重要程度:无。
保留,将来使用。

403("Forbidden")

重要程度:中等。
客户端请求的结构正确,但是服务器不想处理它。这跟证书或者身份认证不正确的情况不同,若证书不正确,应该发送响应代码401。该响应代码常用于一个资源只允许在特定时间段内访问,

404("Not Found")

重要程度:高。
服务器无法根据客户端的请求找到资源(网页)。web服务可以通过404响应告诉客户端所请求的URI是空的,然后客户端就可以通过向该URI发送PUT请求来创建一个新资源了。但是404也有可能是用来掩饰403或者401.

405("Method Not Allowd")

重要程度:中等。
客户端试图使用一个本资源不支持的HTTP方法。例如:一个资源只支持GET方法,但是客户端使用PUT方法访问。

406("Not Acceptable")

重要程度:中等。
服务器无法根据客户端请求的内容特性完成请求。例如:客户端通过Accept头指定媒体类型为application/json+hic,但是服务器只支持application/json。

407("Proxy Authentication Required")

重要程度:低。
只有HTTP代理会发送这个响应代码。它跟401类似,唯一区别在于:这里不是无权访问web服务,而是无权访问代理。跟401一样,可能是因为客户端没有提供证书,也可能是客户端提供的证书不正确或不充分。

408("Reqeust Timeout")

重要程度:低。
服务器等待客户端发送的请求时间过长,超时。

409("Conflict")

重要程度:高。
服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突。

410("Gone")

重要程度:中等。
客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置。

411("Length Required")

重要程度:低到中等。
服务器无法处理客户端发送的不带Content-Length的请求信息。

412("Precondition Failed")

重要程度:中等。
客户端请求信息的先决条件错误。

413("Request Entity Too Large")

重要程度:低到中等。
由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。

414("Request-URI Too Long")

重要程度:低。
请求的URI过长(URI通常为网址),服务器无法处理。

415("Unsupported Media Type")

重要程度:中等。
服务器无法处理请求附带的媒体格式。

416("Requestd Range Not Satisfiable")

重要程度:低。
当客户端所请求的字节范围超出表示的实际大小时,服务器发送此响应代码。

417("Expectation Failed")

重要程度:中等。
服务器无法满足Expect的请求头信息。此响应代码跟100正好相反。当你用LBYL请求来考察服务器是否会接受你的表示时,如果服务器确认会接受你的表示,那么你将获得响应代码100,否则你将获得417。

5XX 服务端错误

这些响应代码表明服务器端出现错误。一般来说,这些代码意味着服务器处于不能执行客户端请求的状态。有时,服务器能够估计客户端应在多久之后重试。并把该信息放在Retry-After响应报头里。

5XX系列响应代码在数量上不如4XX系列多,这不是因为服务器错误的几率小,而是因为没有必要如此详细--对于服务器方面的问题,客户端是无能为力的。

500("Internal Server Error")

重要程度:高。
服务器内部错误,无法完成请求。

501("Not Implemented")

重要程度:低。
服务器不支持请求的功能,无法完成请求。

502("Bad Gateway")

重要程度:低。
只有HTTP代理会发送这个响应代码。它表明代理方面出现问题,或者代理与上行服务器之间出现问题,而不是上行服务器本身有问题。若代理根本无法访问上行服务器,响应代码将是504。

503("Service Unavailable")

重要程度:中等到高。
由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。

504("Gateway Timeout")

重要程度:低。
跟502类似,只有HTTP代理会发送此响应代码。充当网关或代理的服务器,未及时从远端服务器获取请求。

505("HTTP Version Not Supported")

重要程度: 非常低。
服务器不支持请求的HTTP协议的版本,无法完成处理。

6XX

600 源站没有返回响应头部,只返回实体内容

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://maplefix.top/archives/the-http-status-code