本文主要整理了一些常见的HTTP状态码,并做了简单的解释。
1XX:消息
这类状态码,代表请求已被服务端接受,但服务端还要继续进行处理。
100 代表继续 Continue
服务端收到请求,并表示可以继续,当客户端准备推送较大的数据时,可以用100表示允许
101 切换协议 Switching Protocols
比较常见的是响应WebSockets连接,浏览器会先发送HTTP请求,在请求头里带上希望升级为WebSockets协议的相关信息。
服务端收到后,如果支持 WebSockets,就会返回这个状态码 101,进行 HTTP 到 WebSockets 的协议切换。
2XX:成功
表示成功处理了请求
200 成功 OK
服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201 已创建 Created
请求成功并且服务器创建了新的资源。
202 已接受 Accepted
服务器已接受请求但尚未处理
3XX:重定向
表示要完成请求,需要进一步操作。通常这些状态代码用来重定向。
301 永久性重定向 Moved Permanently
资源已被分配了新的 URL,客户端向新地址发送请求,未来所有的请求都应该使用新的URL,服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 临时性重定向 Found
- 资源临时被分配了新的 URL,旧地址还在,客户端继续向旧地址发送请求。
- 通常情况下,301状态码比302更常用,因为永久性重定向对于SEO和搜索引擎的优化更加友好,而且可以使浏览器和搜索引擎更好地缓存新的URL,从而提高性能和减少网络流量。但在负载均衡和应急维护等情况下,临时性重定向也是非常有用的。
303 查看其他位置 See Other
- 表示请求已经被服务器接收,但需要进一步的操作才能完成请求。它通常用于POST请求的响应,告诉客户端应该使用GET方法重新发起请求。
- 例如,当用户提交一个表单后,服务器可能会返回303状态码,告诉浏览器应该使用GET方法重新请求一个新的URL,以防止用户刷新页面时重新提交表单。
307 临时性重定向 Temporary Redirect
- 请求的资源临时从不同的URI 响应请求,临时重定向。与302类似。使用GET请求重定向。
- 当服务器返回状态码 302 时,表示请求的资源暂时被重定向到其他位置。对于 GET 请求,客户端会自动进行重定向操作,而对于POST 请求,则可能会将请求方法改为 GET 并重定向。这样可能导致一些安全漏洞,因为 POST 请求的消息体可能包含敏感信息,通过自动转换为 GET 方法并携带在 URL 中可能会带来安全风险。
- 与 302 不同,当服务器返回状态码 307 时,表示请求的资源也被临时重定向到了其他位置。不同的是,对于所有类型的请求(包括 GET、POST 等),客户端都会保持原始请求的方法和消息体不变,并重发请求到新的 URI。这样可以避免因为自动转换请求方法而带来的安全风险,适用于需要保持请求方法和消息体的场景。
4XX:请求错误
表示请求可能出错,妨碍了服务器的处理。
400 错误请求 Bad Request
服务器不理解请求的语法,通常是语义有误或请求参数有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
401 未授权 Unauthorized
当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。
403 禁止 Forbidden
服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。
404 未找到 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。如果服务器不想告诉请求者拒绝理由,或者服务器端没有这个页面,都可以返回404给客户端。
408 请求超时 Request Timeout
服务器等候请求时发生超时,客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何更改。
5XX:服务器错误
表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
500 服务器内部错误 Internal Server Error
服务器遇到错误,无法完成请求。一般来说,这个问题都会在服务器端的源代码出现错误时出现,如果服务端未对异常做处理返回对应的状态码,那么一般会默认返回500。
501 未实现 Not Implemented
服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码,以告诉客户端服务器不支持请求中要求的功能
502 错误网关 Bad Gateway
服务器作为网关或代理,从上游服务器收到无效响应。
503 服务不可用 Service Unavailable
服务器目前无法使用(由于超载或停机维护)。例如,如果某些线程或数据库连接池已经没有空闲则servlet会返回这个头信息。服务器可提供一个Retry-After头信息告诉客户端什么时候可以再试一次。
504 网关超时 Gateway Timeout
服务器作为网关或代理,但是没有及时从上游服务器收到请求。该状态是HTTP 1.1新加入的。
505 HTTP 版本不受支持 HTTP Version Not Supported
服务器不支持请求中所用的 HTTP 协议版本。该状态是HTTP 1.1新加入的。