# HTTP请求状态码
# 1. 1xx - 临时响应
表示临时响应并需要请求者继续执行操作的状态代码
| 状态码 | 解释 |
|---|---|
| 100 | 初始的请求已经接受,客户应当继续发送请求的其余部分 |
| 101 | 服务器将遵从客户的请求转换到另外一种协议 |
# 2. 2xx - 成功
这类状态代码表明服务器成功地接受了客户端请求
| 状态码 | 含义 | 解释 |
|---|---|---|
| 200 | OK(成功) | 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页 |
| 201 | Created(已创建) | 请求成功并且服务器创建了新的资源 |
| 202 | Accepted(已接受) | 服务器已接受请求,但尚未处理 |
| 203 | Non-Authoritative Information(非授权信息) | 服务器已成功处理了请求,但返回的信息可能来自另一来源 |
| 204 | No Content(无内容) | 服务器成功处理了请求,但没有返回任何内容 |
| 205 | Reset Content(重置内容) | 服务器成功处理了请求,但没有返回任何内容 |
| 206 | Partial Content(部分内容) | 服务器成功处理了部分 GET 请求 |
# 3. 3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向
| 状态码 | 含义 | 解释 |
|---|---|---|
| 300 | Multiple Choices(多种选择) | 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择 |
| 301 | Moved Permanently(永久移动) | 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置 |
| 302 | Found(临时移动) | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求 |
| 303 | See Other(查看其他位置) | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码 |
| 304 | Not Modified(未修改) | 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容 |
| 305 | Use Proxy(使用代理) | 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理 |
| 307 | Temporary Redirect(临时重定向) | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求 |
# 4. 4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理
| 状态码 | 含义 | 解释 |
|---|---|---|
| 400 | Bad Request(错误请求) | 服务器不理解请求的语法 |
| 401 | Unauthorized(未授权) | 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应 |
| 403 | Forbidden(禁止) | 服务器拒绝请求 |
| 404 | Not Found(未找到) | 服务器找不到请求的网页 |
| 405 | Method Not Allowed(方法禁用) | 请求的方式(get、post、delete)方法与后台规定的方式不符合。比如: 后台方法规定的请求方式只接受get,如果用post请求,就会出现 405 method not allowed的提示 |
| 406 | Not Acceptable(不接受) | 无法使用请求的内容特性响应请求的网页 |
| 407 | Proxy Authentication Required(需要代理授权) | 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理 |
| 408 | Request Timeout(请求超时) | 服务器等候请求时发生超时 |
| 409 | Conflict(冲突) | 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息 |
| 410 | Gone(已删除) | 如果请求的资源已永久删除,服务器就会返回此响应 |
| 411 | Length Required(需要有效长度) | 服务器不接受不含有效内容长度标头字段的请求 |
| 412 | Precondition Failed(未满足前提条件) | 服务器未满足请求者在请求中设置的其中一个前提条件 |
| 413 | Request Entity Too Large(请求实体过大) | 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力 |
| 414 | Request-URI Too Long(请求的 URI 过长) | 请求的 URI(通常为网址)过长,服务器无法处理 |
| 415 | Unsupported Media Type(不支持的媒体类型) | 请求的格式不受请求页面的支持 |
| 416 | Requested Range Not Satisfiable(请求范围不符合要求) | 如果页面无法提供请求的范围,则服务器会返回此状态代码 |
| 417 | Expectation Failed(未满足期望值) | 服务器未满足"期望"请求标头字段的要求 |
# 5. 5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
| 状态码 | 含义 | 解释 |
|---|---|---|
| 500 | Internal Server Error(服务器内部错误) | 服务器遇到错误,无法完成请求 |
| 501 | Not Implemented(尚未实施) | 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码 |
| 502 | Bad Gateway(错误网关) | 服务器作为网关或代理,从上游服务器收到无效响应 |
| 503 | Service Unavailable(服务不可用) | 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态 |
| 504 | Gateway Timeout(网关超时) | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
| 505 | HTTP Version Not Supported(HTTP 版本不受支持) | 服务器不支持请求中所用的 HTTP 协议版本 |
# 6. 301、302、307 区别
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
使用307重定向,请求应该与另一个URI重复,但后续的请求应仍使用原始的URI。 与302相反,当重新发出原始请求时,不允许更改请求方法。 例如,应该使用另一个POST请求来重复POST请求
301和302本来在规范中是不允许重定向时改变请求方法的(将POST改为GET),但是许多浏览器却允许重定向时改变请求方法(这是一种不规范的实现)。
303的出现正是为了给上面的301,302这种行为作出个规范(将错就错吧),也就是允许重定向时改变请求方法。此外303响应禁止被缓存。大多数的浏览器处理302响应时的方式恰恰就是上述规范要求客户端处理303响应时应当做的,所以303基本用的很少,一般用302。
307和308的出现也是给上面的行为做个规范,不过是不允许重定向时改变请求方法。
尽量使用301跳转
- 使用301重定向告诉搜索引擎和用户,网站已永久迁移。这不仅仅照顾到了用户体验,也符合搜索引擎的收录规则,在目前来说是一种非常安全可靠的网站迁移方案。
- 302重定向如果大量使用,给让搜索引擎认为你在用重复的内容,来干扰网站在搜索引擎结果中的排名,并且会被纳入黑帽SEO的范畴,导致网站权重的下降,甚至不再收录网站的相关内容。 注:302重定向经常被用于做url劫持,黑帽seo技术中 从网站A(网站比较烂)上做了一个302跳转到网站B(搜索排名很靠前),这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址,这样在不知不觉间,网站B在为网站A作贡献,网站A的排名就靠前了。
# 7. 参考文章
详解重定向(HTTP状态码301/302/303/307/408)附例子 (opens new window) HTTP Status Codes (opens new window) REST API Design - HTTP Status Codes (opens new window)
← TCP三次握手和四次挥手 HTTP发展历程 →