[面试必背] HTTP常见状态码

HTTP 响应状态码

HTTP协议标准是由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)制定的,其中最著名的是RFC-2616,定义了HTTP协议中现今广泛使用的一个版本---HTTP 1.1。

HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。 响应被归为以下五大类:

  1. 信息响应 (100--199)
  2. 成功响应 (200--299)
  3. 重定向消息 (300--399)
  4. 客户端错误响应 (400--499)
  5. 服务端错误响应 (500--599)

为了方便归类对比,顺序略有调整。

1XX 信息响应

100 Continue

  • 含义:这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。
  • 使用场景:客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。常用于POST大数据传输

101 Switching Protocols

  • 含义:服务器理解并愿意遵循客户端的请求,将使用新的协议进行通讯。
  • 使用场景:当客户端请求切换协议(如从HTTP/1.1切换到WebSocket)时,服务器同意切换协议,从HTTP升级到WebSocket,并返回101状态码。

2XX 成功响应

200 OK

  • 含义:请求已成功,服务器已返回所请求的数据。
  • 使用场景:GET、POST、PUT、DELETE等请求成功时都会返回此状态码。

201 Created

  • 含义:请求已成功,并且在服务器上创建了一个新的资源。
  • 使用场景:通常在POST请求成功创建资源时返回此状态码。

202 Accepted

  • 含义:请求已被接受用于处理,但尚未完成。请求可能会在稍后完成,服务器不保证请求的处理结果。

  • 使用场景:用于异步处理的请求,例如,提交一个任务,服务器接收到任务但需要时间处理。

203 Non-Authoritative Information

  • 含义:请求成功,但返回的元信息不是原始服务器的权威信息,而是来自本地或第三方源。
  • 使用场景:代理服务器修改了原始服务器的响应内容后返回给客户端。

205 Reset Content

  • 含义:请求成功,服务器要求客户端重置文档视图。
  • 使用场景:常用于告诉客户端清除表单输入或重置文档视图。服务器成功处理了请求,并指示客户端重置当前页面或表单。

204 No Content

  • 含义 :请求已成功,但服务器没有返回任何内容
  • 使用场景:常用于DELETE请求成功,或PUT请求服务器只需要告知操作成功,不需要返回任何内容时。

206 Partial Content

  • 含义 :服务器成功处理了部分GET请求,返回了部分内容
  • 使用场景:一般用来做断点续传,或者是视频文件等大文件的加载。

3XX 重定向消息

304 Not Modified

  • 含义:请求的资源自上次请求以来未被修改,客户端可以使用缓存的版本。
  • 使用场景:用于缓存控制,减少数据传输。

301 Moved Permanently

  • 含义:请求的资源已被永久移动到新的URL。
  • 使用场景:当资源的URL发生永久性改变时使用,搜索引擎会更新链接。

302 Found

  • 含义:请求的资源临时被移动到新的URL。
  • 使用场景:临时重定向,与301类似,但资源的URL只是暂时变化。

308 Permanent Redirect

  • 含义:请求的资源已被永久移动到新的URL。
  • 使用场景:与301类似,但确保POST方法不会变成GET方法。

307 Temporary Redirect

  • 含义:请求的资源临时移动到新的URL。
  • 使用场景:与302类似,但确保POST方法不会变成GET方法。

303 See Other

  • 含义:请求的资源可以在另一个URL上找到,应该使用GET方法获取。
  • 使用场景:在POST请求后重定向到一个新的页面。

区别

  • 301 vs 308

    • 301:永久重定向,但POST方法会变成GET方法。
    • 308:永久重定向,保持原有的HTTP方法。
  • 302 vs 307

    • 302:临时重定向,但POST方法可能会变成GET方法。
    • 307:临时重定向,保持原有的HTTP方法。

重定向中的方法变更

当服务器返回301(Moved Permanently)或302(Found)状态码进行重定向时,客户端(如浏览器)在默认情况下会将原本的POST请求方法改为GET请求。这意味着在重定向之后,POST请求体中的数据将不会再发送。

假设客户端发送一个POST请求:

  • 初始请求

    makefile 复制代码
    POST /submit-data HTTP/1.1
    Host: example.com
    Content-Type: application/x-www-form-urlencoded
    
    field1=value1&field2=value2

服务器返回一个302重定向响应:

  • 重定向响应

    vbnet 复制代码
    HTTP/1.1 302 Found
    Location: http://www.example.com/new-location

根据HTTP规范,浏览器会将重定向后的请求方法改为GET,并且不会携带原始POST请求的请求体:

  • 重定向后的请求

    vbnet 复制代码
    GET /new-location HTTP/1.1
    Host: example.com

解决方法变更的问题

为了避免POST方法变成GET,可以使用以下状态码:

303 See Other:明确指示客户端应使用GET方法请求新的URL。

307 Temporary Redirect :指示客户端应该使用原来的请求方法(如POST)重新请求新的URL。

308 Permanent Redirect :指示客户端应该使用原来的请求方法(如POST)永久性地请求新的URL。

4XX 客户端错误响应

400 Bad Request

  • 含义 :服务器无法理解请求,因为请求格式有误
  • 使用场景:请求的格式不正确、缺少必要参数等情况。

422 Unprocessable Entity

  • 含义 :服务器理解请求实体,但包含语义错误或验证失败,无法处理。
  • 使用场景:数据验证失败、业务规则验证失败等。

401 Unauthorized

  • 含义 :请求未授权,需要提供身份验证信息
  • 使用场景:通常在需要登录或提供令牌的接口上返回。

407 Proxy Authentication Required

  • 含义 :客户端必须首先使用代理进行身份验证
  • 使用场景:当客户端通过代理服务器访问目标服务器时,代理服务器要求进行身份验证。

403 Forbidden

  • 含义:服务器理解请求,但拒绝执行。
  • 使用场景:请求被理解,但权限不够,例如访问受限资源时。如在外网环境下,访问只有内网IP才能访问的时候则返回

404 Not Found

  • 含义:请求的资源不存在,或者服务器拒绝请求又不想说明理由时。
  • 使用场景:URL错误或资源已删除时返回。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。

405 Method Not Allowed

  • 含义:请求方法不被允许。
  • 使用场景:如在只能用GET的接口上使用POST方法时返回。

408 Request Timeout

  • 含义:客户端在服务器预备等待的时间内未能发送请求。
  • 使用场景 :当客户端发送请求的时间过长导致超时。

413 Payload Too Large

  • 含义:请求实体过大,服务器无法处理。
  • 使用场景:如上传文件大小超过服务器限制时返回。

429 Too Many Requests

  • 含义:客户端在规定时间内发送了太多请求。
  • 使用场景:用于速率限制,防止滥用。

5XX 服务端错误响应

500 Internal Server Error

  • 含义:服务器内部发生错误,无法完成请求。
  • 使用场景:服务器端代码异常或配置错误时返回。

501 Not Implemented

  • 含义:服务器不支持请求的方法。
  • 使用场景:客户端请求了服务器未实现的功能。

503 Service Unavailable

  • 含义:服务器当前无法处理请求,可能因为过载或维护。
  • 使用场景:服务器暂时无法处理请求时返回,如服务器停机维护时,主动用503响应请求或 nginx 设置限速,超过限速,会返回503。

502 Bad Gateway

  • 含义 :服务器作为网关或代理,从上游服务器收到无效响应
  • 使用场景:服务器代理其他服务时,其他服务出错。

504 Gateway Timeout

  • 含义 :服务器作为网关或代理,未能及时从上游服务器接收响应
  • 使用场景:服务器代理其他服务时,上游服务器超时。

以上就是常见http状态码,对比归类地记会快很多,喜欢就点个收藏吧~

参考:

读 HTTP 协议 RFC-2616 | Harttle Land

HTTP 响应状态码 - HTTP | MDN (mozilla.org)

面试官:说说HTTP 常见的状态码有哪些,适用场景? · Issue #144 · febobo/web-interview (github.com)

相关推荐
zhougl99626 分钟前
html处理Base文件流
linux·前端·html
花花鱼30 分钟前
node-modules-inspector 可视化node_modules
前端·javascript·vue.js
HBR666_33 分钟前
marked库(高效将 Markdown 转换为 HTML 的利器)
前端·markdown
careybobo2 小时前
海康摄像头通过Web插件进行预览播放和控制
前端
杉之3 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
喝拿铁写前端3 小时前
字段聚类,到底有什么用?——从系统混乱到结构认知的第一步
前端
再学一点就睡4 小时前
大文件上传之切片上传以及开发全流程之前端篇
前端·javascript
木木黄木木5 小时前
html5炫酷图片悬停效果实现详解
前端·html·html5
请来次降维打击!!!5 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
Alo3655 小时前
面试考点复盘(二)
面试