今夜我们一起学习HTTP之状态码
状态码的职责是当客户端向服务端发送请求时,描述返回的请求的结果。
状态码分类
类别 | 原因短语 | |
---|---|---|
1xx | Informational(信息性状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务端错误状态码) | 服务器处理请求出错 |
常见的14个状态码
- 200 OK
客户端发来的请求在服务端被正常处理了
- 204 No Content
服务器接收的请求已经成功处理,但是没有资源可返回,也就是返回的响应报文中不含实体的主体部分
- 206 Partial Content
客户端只进行了范围请求(与request headers的Range有关吧).服务器的响应报文中只包含了资源的一部分
- 301 Moved Permanently
永久重定向301说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。
- 302 Found
302 Found 重定向状态码表明请求的资源被暂时的移动到了由Location 头部指定的 URL 上。浏览器本次会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新
几乎所有的重定向响应都会带有Location首部,浏览器接到带有Location首部的响应都会到响应的URL去看看
- 303 See Other
303 See Other 重定向状态码,通常作为 PUT 或 POST 操作的返回结果,它表示重定向链接指向的不是新上传的资源,而是另外一个页面,比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET
你用PUT或者POST上传了一张了一张图片到/cai.com/a.png这个位置,这时候服务器不想让你继续访问/cai.com/a.png这个URI而是返回303 See Other,让你用GET到/cai.com/uploadsucess.html这里然后给你展示一个“嘿恭喜你上传成功”之类的页面..
- 304 Not Modified
客户端使用附带的条件请求(比如请求报文的headers中包含If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中的任一首部)时,服务器端允许这个请求访问资源,但是因为资源未满足条件,所以用304状态码返回,但是不包含任何响应的主体部分。304虽然被划分在3XX但是和重定向没关系
我能想到的和304有关的就是HTTP缓存,你发一个request,带上If-Modified-Since之类的headers到服务器,如果服务器返回了304,这时候你就直接用本地的缓存好了,不需要再去接收服务端的数据,因为和你上次请求的并无差别
- 307 Temporary Redirect
临时重定向,和302差不多,302的标准禁止POST变换成GET,但大家都不遵守。而307则会遵守浏览器标准,不会从POST变成GET
- 400 Bad Request
请求报文中存在语法错误,服务器无法理解这个请求
- 401 Unauthorized
这个状态码表示发送的请求需要通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,浏览器初次接收401时会弹出认证用的对话窗口,如果之后再收到401.就表示之前的用户认证失败
- 403 Forbidden
浏览器请求的资源访问被服务器拒绝了,有可能是没有获得文件系统的访问授权,又或者访问权限出现问题(从未授权的发送源IP地址试图访问)等情况都有可能导致403
- 404 Not Found
服务器上找不到你请求的资源。服务器也可以在拒绝请求,并且不想说明理由时使用
- 500 Internal Server Error
服务端在执行请求时发生了错误,服务端的web应用存在bug或者临时的故障
- 503 Service Unavailable
服务器暂时处于超负载或正在进行停机维护,无法处理请求。如果事先知道解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端