常见的状态码
- 肯定会碰到:
101
/200
/301
/302
/304
/400
/404
/502
- 可能会碰到:
101/200/201/204/206/301/304/307/400/401/403/404/405/413/418/422/429/500/501/502/503/504
100 Continue
表示一切正常,客户端应该继续请求。 为了让服务器检查请求的首部, 客户端必须在发送请求实体前, 在初始化请求中发送 Expect: 100-continue
首部并接收 100 Continue
响应状态码
101 Switching Protocol
协议切换,服务器应客户端升级协议的请求(Upgrade (en-US)请求头)正在切换协议。
例如:使用WebSockets
时会用到协议切换。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
200 OK
请求成功。
201 Created
表示请求已经被成功处理,并且创建了新的资源。出现在POST
或者PUT
请求中。
204 No Content
响应不会返回 Body; 进行资源更新,但是不需要改变当前展示给用户的页面。
206 Partial Content
当请求多媒体数据数据较大时,会进行分片传输。
如果只包含一个数据区间,那么整个响应的 Content-Type
首部的值为所请求的文件的类型,同时包含 Content-Range
首部。
如果包含多个数据区间,那么整个响应的Content-Type
首部的值为 multipart/byteranges
,其中一个片段对应一个数据区间,并提供Content-Range
和Content-Type
描述信息。
300 Multiple Choices
用来表示重定向的响应状态码,表示该请求拥有多种可能的响应。用户代理或者用户自身应该从中选择一个。
304 Not Modified
资源已被缓存,与之相关的响应头部有:
ETag
last-modified
/if-modified-since
一般用作 index.html
等不带 hash 的资源。
301 Moved Permanently
永久重定向 :说明请求的资源已经被移动到了由Location
头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。除非额外指定,否则这个响应也是可缓存的
。
该操作比较危险,需要谨慎操作:如果设置了 301,但是一段时间后又想取消,但是浏览器中已经有了缓存,还是会重定向。
http 转向 https 时,有时会使用 301。如B站。
对标308。
302 Found
暂时重定向:同上,但搜索引擎不会对该资源的链接进行更新。只有在Cache-Control
或Expires
中进行了指定的情况下,这个响应才是可缓存的
。
http 转向 https 时,有时也会使用 302。如知乎。
307 Temporary Redirect
暂时重定向:也可作为 http 到 https 的重定向。
还有一种用途用作 HSTS,当谷歌浏览器发现某 http 资源已被加入到 HSTS 列表,浏览器内部会通过 307 作重定向。
HTST:让浏览器强制使用
HTTPS("超文本传输安全协议")
与网站进行通信,以减少会话劫持
风险。
区别
302
:临时重定向,但是会在重定向的时候改变 method: 把 POST 改成 GET,于是有了 307。
307
:Temporary Redirect。临时重定向,在重定向时不会改变 method。
400 Bad Request
对于服务器无法理解的参数,将会使用 400 作为返回码
401 Unauthorized
当没有权限的用户请求需要带有权限的资源,或者认证失败时,会返回401,此时携带正确的权限凭证再试一次可以解决问题。
403 Forbidden
服务器已经理解请求,但是拒绝执行它,无论权限凭证是否正确。
401 Unauthorized响应该用于缺失或错误的身份验证。
403 Forbidden响应该在用户经过身份验证但没有被授权在给定资源上执行所请求的操作之后使用。
404 Not Found
未找到资源
405 Method Not Allowed
请求行中指定的请求方法不能被用于请求相应的资源。
该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。
408 Request Timeout
请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。
413 Payload Too Large
服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。
418 I'm A Teapot
服务器拒绝尝试用 “茶壶冲泡咖啡”。
也可以用来处理不合法的参数校验,我想要个字符串,你给了我一个整数?
422 Unprocessable Entity
常用来处理不合法的参数校验。
请求格式正确,但由于语义错误而无法遵循。
429 Too Many Request
请求过多被限流。
超过某一个 API 的 Rate Limit 规则,会被限流,返回 429 状态码。
500 Internal Server Error
服务器内部错误,很有可能是应用层未捕获错误
而导致整个服务挂掉。
502 Bad Gateway
服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。
一般表现为你自己写的应用层服务(Java/Go/PHP)挂了,网关层无法接收到正确的响应。
503 Service Unavailable
服务器没有准备好处理请求。 常见原因是服务器因维护或重载而停机,或是由于大量流量造成服务忙。
504 Gateway Timeout
网关超时,上游应用层迟迟未响应。
一般表现为应用层服务 (upstream) 超时,如查库操作耗时十分钟,超过了 Nginx 配置的超时时间