Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

面试官:说说HTTP 常见的状态码有哪些,适用场景? #155

Open
linwu-hi opened this issue Jul 30, 2023 · 0 comments
Open
Labels

Comments

@linwu-hi
Copy link
Owner

linwu-hi commented Jul 30, 2023

面试官:说说HTTP 常见的状态码有哪些,适用场景?

一、HTTP状态码

HTTP状态码(HTTP Status Code)是用来表示网页服务器超文本传输协议响应状态的3位数字代码。它由RFC 2616规范定义,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774与RFC 4918等规范扩展。简单来说,HTTP状态码是服务器告诉客户端当前请求响应的状态,通过状态码可以判断和分析服务器的运行状态。

二、常见状态码

HTTP状态码分为五类,每类以不同的数字开头表示不同的响应状态:

1xx - 信息类

1xx状态码表示请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。常见状态码有:

  • 100(继续):客户端继续发送请求,这是临时响应,用来通知客户端部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。
  • 101(切换协议):服务器根据客户端的请求切换协议,主要用于WebSocket或HTTP/2升级。

2xx - 成功类

2xx状态码表示请求已成功被服务器接收、理解,并接受。常见状态码有:

  • 200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回。
  • 201(已创建):请求成功并且服务器创建了新的资源。
  • 204(无内容):服务器成功处理请求,但没有返回任何内容。

3xx - 重定向类

3xx状态码表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。常见状态码有:

  • 301(永久重定向):请求的网页已永久移动到新位置。服务器返回此响应时,会自动将请求者转到新位置。
  • 302(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 304(未修改):服务器告诉客户端可以直接使用缓存的版本,无需重新请求。
  • 307(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx - 客户端错误类

4xx状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。常见状态码有:

  • 400(错误请求):服务器不理解请求的语法。
  • 401(未授权):请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
  • 403(禁止):服务器拒绝请求。
  • 404(未找到):服务器找不到请求的网页。

5xx - 服务器错误类

5xx状态码表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生。常见状态码有:

  • 500(服务器内部错误):服务器遇到错误,无法完成请求。
  • 502(错误网关):服务器作为网关或代理,从上游服务器收到无效响应。
  • 503(服务不可用):服务器目前无法使用(由于超载或停机维护)。

三、适用场景

不同的状态码适用于不同的场景,下面给出一些常见的适用场景:

  • 200:表示请求成功,服务器正确处理了请求。
  • 204:表示服务器正确处理了请求,但没有返回任何内容,通常用于删除操作等。
  • 301:表示永久重定向,请求的资源已经被永久移动到新的位置。
  • 400:表示客户端请求错误,服务器无法理解请求的语法。
  • 403:表示请求被服务器拒绝,没有权限访问该资源。
  • 404:表示请求的资源不存在,服务器找不到请求的网页。

不同的状态码对应不同的请求处理情况,客户端可以根据状态码来判断请求是否成功,并做相应处理。

参考文献

@linwu-hi linwu-hi added the HTTP label Jul 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant