Skip to content

http的请求头、状态码、请求方法

约 2560 字大约 9 分钟

HTTP

2025-07-02

一、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:信息性状态码(临时响应,表示请求已接收)

状态码名称说明
100Continue服务器已接收请求头,客户端可继续发送请求体(主要用于大文件上传场景)
101Switching Protocols服务器同意客户端的协议切换请求(如从 HTTP 切换到 WebSocket)

2xx:成功状态码(请求被正常处理)

状态码名称说明
200OK请求成功,响应体包含具体数据(最常见的成功状态)
201Created请求成功且服务器创建了新资源(如 POST 新增数据时返回,响应头通常包含 Location 指向新资源地址)
204No Content请求成功,但响应体无内容(如 DELETE 删除资源后返回,客户端无需刷新页面)
206Partial Content部分请求成功(用于断点续传,客户端通过 Range 头指定获取部分数据)

3xx:重定向状态码(需要客户端进一步操作)

状态码名称说明
301Moved Permanently资源永久迁移到新地址,客户端应更新书签,后续请求直接使用新地址(浏览器会缓存重定向)
302Found资源临时迁移到新地址,客户端下次请求仍使用原地址(不缓存)
304Not Modified资源未修改,客户端可使用本地缓存(配合 If-Modified-SinceIf-None-Match 头使用)
307Temporary Redirect与 302 类似,但严格禁止请求方法变更(如原 POST 请求重定向后仍用 POST)

4xx:客户端错误状态码(请求存在错误)

状态码名称说明
400Bad Request请求格式错误(如 JSON 语法错误、参数缺失),服务器无法处理
401Unauthorized请求需要身份认证(未携带令牌或令牌无效),客户端需重新登录
403Forbidden服务器拒绝请求(已认证但无权限,如普通用户访问管理员接口)
404Not Found请求的资源不存在(URL 错误或资源已删除)
405Method Not Allowed请求方法不被允许(如用 POST 访问仅支持 GET 的接口),响应头 Allow 会说明允许的方法
408Request Timeout服务器等待请求超时(客户端发送请求过慢)
413Payload Too Large请求体过大,服务器无法处理(如上传文件超过限制)
429Too Many Requests客户端请求过于频繁,触发服务器限流策略(通常配合 Retry-After 头告知重试时间)

5xx:服务器错误状态码(服务器处理请求时出错)

状态码名称说明
500Internal Server Error服务器内部错误(如代码bug、数据库连接失败,最常见的服务器错误)
502Bad Gateway服务器作为网关/代理时,收到上游服务器的无效响应(如反向代理后端服务崩溃)
503Service Unavailable服务器暂时无法处理请求(如维护中),通常会包含 Retry-After 头建议重试时间
504Gateway Timeout服务器作为网关/代理时,等待上游服务器响应超时

三、HTTP 请求方法 客户端请求的操作类型

提示

HTTP 请求方法定义了客户端对服务器资源的操作类型,遵循"语义化"设计,不同方法对应不同的操作意图(如获取、新增、修改、删除)。

核心请求方法及使用场景

(1)GET:获取资源(最常用)

  • 语义:从服务器获取指定资源(只读操作,无副作用)。
  • 特点
    • 请求参数通过 URL Query 传递(?key1=value1&key2=value2),长度有限制(不同浏览器限制不同,通常不超过 2048 字符)。
    • 可被缓存(浏览器会默认缓存 GET 请求结果)、收藏为书签、记录在浏览器历史中。
    • 不应用于修改数据的操作(因为可能被重复执行,如刷新页面)。
  • 使用场景:查询数据(如列表查询、详情查询)、搜索功能等。

(2)POST:提交资源(创建资源)

  • 语义:向服务器提交数据,请求服务器创建新资源(有副作用)。
  • 特点
    • 请求参数放在请求体中(无长度限制),支持多种数据格式(JSON、表单、文件等)。
    • 默认不被缓存,不会记录在浏览器历史中,不能收藏为书签。
    • 多次提交可能产生重复资源(如重复提交订单,需后端做幂等性处理)。
  • 使用场景:新增数据(如注册用户、创建订单)、提交表单、上传文件等。

(3)PUT:更新资源(全量更新)

  • 语义:向服务器提交数据,请求服务器更新指定资源(若资源不存在则创建)。
  • 特点
    • 要求客户端提供资源的完整数据(全量更新),例如更新用户信息时需传递所有字段。
    • 幂等性操作(多次执行结果一致),适合用于"替换"资源。
  • 使用场景:全量更新资源(如覆盖式修改用户资料)。

(4)PATCH:更新资源(部分更新)

  • 语义:向服务器提交数据,请求服务器部分更新指定资源(仅更新提供的字段)。
  • 特点
    • 仅需传递需要修改的字段(增量更新),比 PUT 更高效。
    • 幂等性(但实际实现中需注意,例如 PATCH /user/1 每次执行都是修改同一字段,则幂等)。
  • 使用场景:部分更新资源(如仅修改用户的手机号或邮箱)。

(5)DELETE:删除资源

  • 语义:请求服务器删除指定资源。
  • 特点
    • 幂等性操作(多次删除同一资源,结果一致:第一次删除成功,后续删除返回 404)。
  • 使用场景:删除数据(如删除订单、删除用户账号)。

(6)其他常用方法

  • HEAD:与 GET 类似,但服务器仅返回响应头,不返回响应体,用于获取资源的元信息(如判断资源是否存在、获取文件大小)。
  • OPTIONS:请求服务器支持的 HTTP 方法(主要用于跨域请求前的预检请求,验证服务器是否允许跨域)。

四、总结:HTTP 三要素的关联与实践意义

HTTP 请求头、状态码、请求方法是构成 HTTP 协议的核心要素,三者协同工作:

请求方法定义"做什么"(操作类型),请求头描述"怎么做"(附加信息),状态码反馈"结果如何"(处理状态)。

在实际开发中,掌握这三部分知识的意义在于:

  1. 接口调试:通过状态码快速定位问题(如 401 排查认证,500 排查服务器错误)。
  2. 性能优化:利用请求头的缓存策略(Cache-Control)减少重复请求,提升加载速度。
  3. 安全控制:通过 Authorization 头实现身份验证,Origin 头配合 CORS 控制跨域访问。
  4. 语义化设计:规范使用请求方法(如 GET 只读、POST 创建),使接口更易理解和维护。

HTTP 协议仍在不断演进(如 HTTP/2、HTTP/3 对性能的优化),但请求头、状态码、请求方法的核心设计思想保持稳定,是前端开发者必须掌握的基础知识。