http的请求头、状态码、请求方法
一、HTTP 请求头 客户端与服务器的对话凭证
提示
HTTP 请求头是客户端向服务器发送请求时附加的元数据,用于描述请求的上下文信息(如客户端类型、数据格式、认证信息等)。服务器通过解析请求头,可调整响应策略(如返回指定格式的数据、验证权限等)。
常见请求头分类及作用
(1)身份与环境标识类
- User-Agent:标识发送请求的客户端类型(浏览器、设备、爬虫等),格式通常为"应用名称/版本 操作系统 设备信息"。
例如:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
。 - Accept:告知服务器客户端可接收的数据格式(MIME 类型),多个类型用逗号分隔,权重通过
q=值
表示。例如:
Accept: text/html, application/json;q=0.9, */*;q=0.8
表示优先接收 HTML,其次是 JSON,最后是任意类型。 - Accept-Language:客户端可接受的自然语言,用于国际化内容返回。
例如:
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
表示优先中文,其次英文。
(2)数据传输控制类
- Content-Type:仅用于 POST、PUT 等包含请求体的方法,指定请求体的数据格式。常见值:
application/x-www-form-urlencoded
:表单默认格式,数据以key=value&key2=value2
拼接。multipart/form-data
:用于上传文件或包含二进制数据的表单。application/json
:JSON 格式数据(前后端分离常用)。
- Content-Length:表示请求体的字节长度,帮助服务器确认数据是否完整接收。
- Connection:控制连接状态,
Connection: keep-alive
表示复用 TCP 连接(HTTP/1.1 默认),减少握手开销。
(3)缓存与安全类
- Cache-Control:控制请求的缓存策略。
例如
Cache-Control: no-cache
表示不使用缓存,需向服务器验证新鲜度;max-age=3600
表示缓存有效期 3600 秒。 - Authorization:用于身份认证,通常携带令牌(Token)或用户名密码。
例如:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
(JWT 令牌格式)。 - Origin:表示请求的源站(协议 + 域名 + 端口),用于跨域资源共享(CORS)验证。
例如
Origin: https://www.example.com
。
二、HTTP 状态码 服务器响应的状态标识
提示
HTTP 状态码是服务器对请求的处理结果的数字标识,由三位数字组成,分为 5 类(以第一位数字区分)。理解状态码可快速判断请求成功与否、失败原因,是调试接口的关键依据。
状态码分类及核心状态码解析
1xx:信息性状态码(临时响应,表示请求已接收)
状态码 | 名称 | 说明 |
---|---|---|
100 | Continue | 服务器已接收请求头,客户端可继续发送请求体(主要用于大文件上传场景) |
101 | Switching Protocols | 服务器同意客户端的协议切换请求(如从 HTTP 切换到 WebSocket) |
2xx:成功状态码(请求被正常处理)
状态码 | 名称 | 说明 |
---|---|---|
200 | OK | 请求成功,响应体包含具体数据(最常见的成功状态) |
201 | Created | 请求成功且服务器创建了新资源(如 POST 新增数据时返回,响应头通常包含 Location 指向新资源地址) |
204 | No Content | 请求成功,但响应体无内容(如 DELETE 删除资源后返回,客户端无需刷新页面) |
206 | Partial Content | 部分请求成功(用于断点续传,客户端通过 Range 头指定获取部分数据) |
3xx:重定向状态码(需要客户端进一步操作)
状态码 | 名称 | 说明 |
---|---|---|
301 | Moved Permanently | 资源永久迁移到新地址,客户端应更新书签,后续请求直接使用新地址(浏览器会缓存重定向) |
302 | Found | 资源临时迁移到新地址,客户端下次请求仍使用原地址(不缓存) |
304 | Not Modified | 资源未修改,客户端可使用本地缓存(配合 If-Modified-Since 或 If-None-Match 头使用) |
307 | Temporary Redirect | 与 302 类似,但严格禁止请求方法变更(如原 POST 请求重定向后仍用 POST) |
4xx:客户端错误状态码(请求存在错误)
状态码 | 名称 | 说明 |
---|---|---|
400 | Bad Request | 请求格式错误(如 JSON 语法错误、参数缺失),服务器无法处理 |
401 | Unauthorized | 请求需要身份认证(未携带令牌或令牌无效),客户端需重新登录 |
403 | Forbidden | 服务器拒绝请求(已认证但无权限,如普通用户访问管理员接口) |
404 | Not Found | 请求的资源不存在(URL 错误或资源已删除) |
405 | Method Not Allowed | 请求方法不被允许(如用 POST 访问仅支持 GET 的接口),响应头 Allow 会说明允许的方法 |
408 | Request Timeout | 服务器等待请求超时(客户端发送请求过慢) |
413 | Payload Too Large | 请求体过大,服务器无法处理(如上传文件超过限制) |
429 | Too Many Requests | 客户端请求过于频繁,触发服务器限流策略(通常配合 Retry-After 头告知重试时间) |
5xx:服务器错误状态码(服务器处理请求时出错)
状态码 | 名称 | 说明 |
---|---|---|
500 | Internal Server Error | 服务器内部错误(如代码bug、数据库连接失败,最常见的服务器错误) |
502 | Bad Gateway | 服务器作为网关/代理时,收到上游服务器的无效响应(如反向代理后端服务崩溃) |
503 | Service Unavailable | 服务器暂时无法处理请求(如维护中),通常会包含 Retry-After 头建议重试时间 |
504 | Gateway Timeout | 服务器作为网关/代理时,等待上游服务器响应超时 |
三、HTTP 请求方法 客户端请求的操作类型
提示
HTTP 请求方法定义了客户端对服务器资源的操作类型,遵循"语义化"设计,不同方法对应不同的操作意图(如获取、新增、修改、删除)。
核心请求方法及使用场景
(1)GET:获取资源(最常用)
- 语义:从服务器获取指定资源(只读操作,无副作用)。
- 特点:
- 请求参数通过 URL Query 传递(
?key1=value1&key2=value2
),长度有限制(不同浏览器限制不同,通常不超过 2048 字符)。 - 可被缓存(浏览器会默认缓存 GET 请求结果)、收藏为书签、记录在浏览器历史中。
- 不应用于修改数据的操作(因为可能被重复执行,如刷新页面)。
- 请求参数通过 URL Query 传递(
- 使用场景:查询数据(如列表查询、详情查询)、搜索功能等。
(2)POST:提交资源(创建资源)
- 语义:向服务器提交数据,请求服务器创建新资源(有副作用)。
- 特点:
- 请求参数放在请求体中(无长度限制),支持多种数据格式(JSON、表单、文件等)。
- 默认不被缓存,不会记录在浏览器历史中,不能收藏为书签。
- 多次提交可能产生重复资源(如重复提交订单,需后端做幂等性处理)。
- 使用场景:新增数据(如注册用户、创建订单)、提交表单、上传文件等。
(3)PUT:更新资源(全量更新)
- 语义:向服务器提交数据,请求服务器更新指定资源(若资源不存在则创建)。
- 特点:
- 要求客户端提供资源的完整数据(全量更新),例如更新用户信息时需传递所有字段。
- 幂等性操作(多次执行结果一致),适合用于"替换"资源。
- 使用场景:全量更新资源(如覆盖式修改用户资料)。
(4)PATCH:更新资源(部分更新)
- 语义:向服务器提交数据,请求服务器部分更新指定资源(仅更新提供的字段)。
- 特点:
- 仅需传递需要修改的字段(增量更新),比 PUT 更高效。
- 幂等性(但实际实现中需注意,例如
PATCH /user/1
每次执行都是修改同一字段,则幂等)。
- 使用场景:部分更新资源(如仅修改用户的手机号或邮箱)。
(5)DELETE:删除资源
- 语义:请求服务器删除指定资源。
- 特点:
- 幂等性操作(多次删除同一资源,结果一致:第一次删除成功,后续删除返回 404)。
- 使用场景:删除数据(如删除订单、删除用户账号)。
(6)其他常用方法
- HEAD:与 GET 类似,但服务器仅返回响应头,不返回响应体,用于获取资源的元信息(如判断资源是否存在、获取文件大小)。
- OPTIONS:请求服务器支持的 HTTP 方法(主要用于跨域请求前的预检请求,验证服务器是否允许跨域)。
四、总结:HTTP 三要素的关联与实践意义
HTTP 请求头、状态码、请求方法是构成 HTTP 协议的核心要素,三者协同工作:
请求方法定义"做什么"(操作类型),请求头描述"怎么做"(附加信息),状态码反馈"结果如何"(处理状态)。
在实际开发中,掌握这三部分知识的意义在于:
- 接口调试:通过状态码快速定位问题(如 401 排查认证,500 排查服务器错误)。
- 性能优化:利用请求头的缓存策略(
Cache-Control
)减少重复请求,提升加载速度。 - 安全控制:通过
Authorization
头实现身份验证,Origin
头配合 CORS 控制跨域访问。 - 语义化设计:规范使用请求方法(如 GET 只读、POST 创建),使接口更易理解和维护。
HTTP 协议仍在不断演进(如 HTTP/2、HTTP/3 对性能的优化),但请求头、状态码、请求方法的核心设计思想保持稳定,是前端开发者必须掌握的基础知识。