返回结果的HTTP状态码
[状态码告知从服务器端返回的请求结果]
状态码的职责是当客户端发送请求时,描述返回的请求结果。借助状态码,用户可以知道具体信息。
状态码如200 OK,三位数字+原因短语
数字 第一位:响应类型
类别 | 原因短语 |
---|---|
1XX | Informational(信息性) |
2XX | Success(成功) |
3XX | Redirection(重定向) |
4XX | Client Error(客户端错误) |
5XX | Server Error(服务器错误) |
只要遵守状态码类别的含义,改变定义的状态码或这自行创建状态码都可以。
[2XX成功]
[200 OK]
从客户端发来的请求被正常处理。
在响应报文中,随状态码一起返回的信息会因方法的不同而发生改变。
GET方法响应返回的是请求资源的实体。
HEAD方法响应返回的是请求资源的实体首部。
[204 No Content]
表示服务器接收的请求已成功处理,但返回的响应报文中不含实体的主体部分,也不允许返回任何实体的主体。
浏览器发出请求后,返回204响应,浏览器显示的页面不会更新。
在只需客户端发送消息而不需要接受新消息内容的情况下使用。
[206 Partial Content]
表示对客户端进行了范围请求,而服务器成功的执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
[3XX 重定向]
[301 Moved Permanently]
永久性重定向。表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。如果已经把资源对应的URI保存为书签了,这时应该按Location首部字段提示的URI重新保存。
资源路径忘记添加/
就会产生301状态码
http://example.com/sample
[302Found]
临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
和301Moved Permanently状态码相似,但302只是临时性质。已移动的资源对应的URI将来还有可能发生改变。
用户把URI保存成书签,但不会像301那样更新书签,而是仍旧保留返回302状态码对应的URI.
[303 See Other]
表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求资源。
303和302Found有相同的功能,但303明确表明了客户端应该采用GET方法获取资源。
使用POST方法访问CGI(通用网关接口)程序,其执行后的处理结果是希望客户端能以GET方法重定向到另一个URI上去,返回303See Other。
当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求自动再次发送
301、302标准是静止将POST方法变成GET方法,但实际使用大家都这么做。。。
[304 Not Modified]
表示客户端发送附带条件的请求时,服务器允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。和重定向无多大关系。
[307 Temporary Redirect]
临时重定向。与302Found有相同的含义。
307会遵守浏览器规则,不会从POST变成GET。但对于处理响应时的行为,每种浏览器都有可能出现不同的情况。
[4XX 客户端错误]
[400 Bad Request]
表示请求报文中存在语法错误。错误发生时,需修改请求的内容再次发送请求。
浏览器会像200 OK一样对待该状态码
[401 Unauthorized]
该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证消息。另外若之前已经进行过1次请求,则表示用户认证失败。
返回401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询(challenge)用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。
[403 Forbidden]
该状态码表明对请求资源的访问被服务器拒绝了。
未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能发生403原因。
[404 Not Found]
该状态码表明服务器上无法找到请求的资源。
也有可能是服务器拒绝请求且不想说明理由时使用。
[5XX 服务器错误]
[500 Internal Server Error]
表明服务器端执行请求时发生了错误。
可能是Web应用存在的bug或者某些临时的故障。
[503 Service Unavailable]
表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
如果事先得知解除以上状况所需时间,最好写入Retry-After首部字段再返回给客户端。
状态码和状态不一致
不少返回的状态码响应都是错误的。。。只是用户没有察觉。。。。。
比如Web应用程序内部错误,状态码依然是200OK。。。这种情况很多见。