计算机网络 —— 浅析HTTP状态码
计算机网络 —— 浅析HTTP状态码
一、HTTP报文
HTTP报文分为请求报文和响应报文。HTTP状态码存在于响应报文中。
我们先来了解一下HTTP请求报文和响应报文的基本结构。
其中响应报文中的状态行的基本结构为
HTTP版本 状态码 原因短语
二、HTTP状态码分类
HTTP状态码可以分为以下五类
分类 | 已定义范围 | 类别 | 原因短语 |
---|---|---|---|
1XX | 100-101 | 信息性状态码 Informational | 接收的请求正在处理,需要请求者继续执行操作 |
2XX | 200-206 | 成功状态码 Success | 请求正常处理完毕 |
2XX | 300-307 | 重定向状态码 Redirection | 需要进行附加操作以完成请求 |
2XX | 400-417 | 客户端错误状态码 Client Error | 服务器无法处理请求,请求包含语法错误或无法完成请求 |
2XX | 500-505 | 服务器错误状态码 Server Error | 服务器处理请求出错 |
三、常用HTTP状态码列表
介绍一些比较常见的HTTP状态码
1. 1XX状态码
100 Continue
含义: 收到了请求的起始部分,客户端应该继续请求。
客户端可以利用Expect首部字段,写明所期望的扩展。虽然HTTP/1.1
规范只定义了100-continue (状态码100 Continue之意)。
等待状态码100响应的客户端在发生请求时,需要指定Expect:
100-continue。
101 Switching Protocols
含义: 切换通信协议。
服务器根据客户端的请求切换协议。
只能切换到更高级的协议,例如,切换到HTTP的新版本协议,切换到SSL/TSL加密通信。
首部字段Upgrade用于指定升级通信协议。
对于附有首部字段Upgrade的请求,服务器可用101 Switching
Protocols状态码作为响应返回。
2. 2XX状态码
200 OK
含义: 请求成功。
表示从客户端发来的请求在服务器端被正常处理了。一般用于GET与POST请求。
204 No Content
含义: 无内容。服务器成功处理,但未返回内容。
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。
在未更新网页的情况下,可确保浏览器继续显示当前文档。
一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况”下使用。
206 Partial Content
含义: 部分内容。该状态码表示客户端进行了范围请求,而服务器成功执行了这部分
的GET请求。
响应报文中包含由Content-Range指定范围的实体内容。
3. 3XX状态码
301 Moved Permanently
含义: 永久移动。(永久性重定向)
请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。
今后任何新的请求都应使用新的URI代替。
新的URI会在响应报文中的Location首部字段中给出。
302 Found
含义: 临时移动。(临时性重定向)
与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
但是希望用户(本次)能使用新的URI访问。
新的URI会在响应报文中的Location首部字段中给出。
303 See Other
含义: 查看其它地址。
与301类似。使用GET和POST请求查看。
该状态码表示由于请求对应的资源存在着另一一个URI,应使用GET
方法定向获取请求的资源。
303状态码和302 Found状态码有着相同的功能,但303状态码明
确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。
304 Not Modified
含义: 资源未更新。
该状态码表示客户端发送附带条件的请求时,服务器端允许请求
访问资源,但未满足条件的情况。
304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。
附带条件的请求: 采用GET方法的请求报文中包含If-Match
, If-Modified- Since
,If-None-Match
, If-Range
, If-Unmodifed-Since
中任一首部。
307 Temporary Redirect
含义: 临时重定向。
与302类似。使用GET请求重定向。
该状态码与302 Found有着相同的含义。
307会遵照浏览器标准,不会从POST变成GET。
注意点
当301、302、 303 响应状态码返回时,几乎所有的浏览器都会把
POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。
301、302 标准是禁止将POST方法改变成GET方法的,但实际使用时大家都会把POST改成GET。
307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。
4. 4XX状态码
400 Bad Request
含义: 客户端请求的语法错误,服务器无法理解。
浏览器会像200 OK 一样对待该状态码。
401 Unauthorized
含义: 请求要求用户的身份认证
该状态码表示发送的请求需要有通过HTTP认证( BASIC认证
、DIGEST认证
)的认证信息。
另外若之前已进行过1次请求,则表示用户认证失败。
返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate
首部用以质询( challenge)用户信息。
当浏览器初次接收到401响应,会弹出认证用的对话窗口。
403 Forbidden
含义: 服务器理解请求客户端的请求,但是拒绝执行此请求。
该状态码表明对请求资源的访问被服务器拒绝了。
服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述。
未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能是发生403的原因。
404 Not Found
含义: 请求资源未找到。
服务器无法根据客户端的请求找到资源(网页)。
该状态码表明服务器上无法找到请求的资源。
也可以在服务器端拒绝请求且不想说明理由时使用。
5. 5XX状态码
500 Internal Server Error
含义: 服务器内部错误,无法完成请求。
该状态码表明服务器端在执行请求时发生了错误。
也有可能是Web应用存在的bug或某些临时的故障。
501 Not Implemented
含义: 服务器不支持请求的功能,无法完成请求。
502 Bad Gateway
含义: 网关或者代理服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
503 Service Unavailable
含义: 由于超载或系统维护,服务器暂时的无法处理客户端的请求。
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
如果事先得知解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端。
504 Gateway Time-out
含义: 请求超时,网关或代理服务器,未及时从远端服务器获取请求。
505 HTTP Version not supported
含义: 服务器不支持请求的HTTP协议的版本,无法完成处理。