学 HTTP 必看!常用请求头与响应头超全详解一篇搞懂

**

在网络通信的世界里,HTTP 协议就像一条看不见的 “高速公路”,而 HTTP 头则是行驶在这条公路上的 “交通标识”,它承载着关键的请求与响应信息,直接影响着数据传输的效率、安全性和准确性。对于学习 HTTP 协议的开发者、测试工程师或是网络爱好者来说,熟练掌握常用的请求头响应头,是理解网络通信原理、排查接口问题、优化网络性能的核心基础。本文将从 HTTP 头的基本概念入手,逐一拆解常用请求头与响应头的功能、格式及应用场景,结合实际案例让你一篇搞懂,轻松应对各类 HTTP 相关场景。

一、HTTP 头的基本认知:是什么?有什么用?

在正式讲解请求头和响应头之前,我们首先要明确:HTTP 头是 HTTP 请求或响应消息中的重要组成部分,位于起始行(请求行 / 状态行)之后、消息体(Body)之前,它以 “键值对”(Key: Value)的形式存在,每个键值对占一行,不同键值对之间用换行符分隔,最后以一个空行表示 HTTP 头的结束。
HTTP 头的核心作用主要有 3 个:
  1. 传递元数据:告诉对方(服务器 / 客户端)本次请求或响应的 “附加信息”,比如数据类型、数据长度、语言偏好等;
  1. 控制通信行为:决定数据传输的方式,比如是否缓存、是否保持连接、是否需要身份验证等;
  1. 保障安全性:通过特定头信息防御网络攻击,比如防止 XSS 攻击、CSRF 攻击、点击劫持等。
根据功能不同,HTTP 头可分为通用头(请求和响应都可使用,如Date、Connection)、请求头(仅用于 HTTP 请求,如User-Agent、Cookie)、响应头(仅用于 HTTP 响应,如Status、Set-Cookie)和实体头(描述消息体,如Content-Type、Content-Length),本文将重点聚焦 “请求头” 和 “响应头” 这两类最常用的头信息。

二、常用 HTTP 请求头:客户端向服务器 “说什么”

HTTP 请求头由客户端(如浏览器、Postman、代码中的 HTTP 客户端)发送给服务器,目的是让服务器了解 “谁在请求”“请求什么”“需要什么格式的响应” 等关键信息。以下是 15 个最常用的请求头,按 “基础信息 – 数据控制 – 安全验证 – 性能优化” 分类讲解:

(一)基础信息类:告诉服务器 “请求的基本情况”

  1. User-Agent(用户代理)
    • 作用:标识发送请求的客户端类型(浏览器、设备、程序),服务器可根据该头返回适配的内容(如移动端 / PC 端页面)。
    • 格式:User-Agent: [客户端类型/版本] [操作系统] [其他信息]
    • 示例:
浏览器请求:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
代码请求:User-Agent: Python-requests/2.31.0
  1. Host(目标主机)
    • 作用:指定请求的目标服务器域名和端口(HTTP 默认 80,HTTPS 默认 443),是 HTTP/1.1 强制要求的请求头(没有会报错 400 Bad Request)。
    • 格式:Host: [域名]:[端口](端口可选,默认端口可省略)
  1. Accept(可接受的响应格式)
    • 作用:告诉服务器客户端能处理的 “响应数据类型”(MIME 类型),服务器会优先返回匹配的格式,若无匹配则返回 406 Not Acceptable。
    • 格式:Accept: [MIME类型1];q=[权重1], [MIME类型2];q=[权重2](q 为权重,0-1,默认 1,权重高优先)
    • 示例:
浏览器接受多种格式:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif;q=0.8
接口请求接受 JSON:Accept: application/json
  1. Accept-Language(可接受的语言)
    • 作用:指定客户端偏好的 “响应语言”(如中文、英文),服务器可据此返回多语言网站的对应版本。
    • 格式:Accept-Language: [语言代码];q=[权重](语言代码如 zh-CN、en-US)
    • 示例:Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

(二)数据控制类:控制 “请求数据的传输方式”

  1. Content-Type(请求体格式)
    • 作用:仅在 “有请求体” 的请求(如 POST、PUT)中使用,告诉服务器 “请求体的数据格式”,是接口开发中最容易出错的头之一(格式不匹配会导致服务器解析失败)。
    • 格式:Content-Type: [MIME类型];charset=[编码](charset 可选,默认 UTF-8)
    • 常见示例:
表单提交:Content-Type: application/x-www-form-urlencoded(键值对格式,如name=zhangsan&age=20)
JSON 提交:Content-Type: application/json;charset=utf-8(JSON 字符串格式,如{“name”:”zhangsan”,”age”:20})
文件上传:Content-Type: multipart/form-data;boundary=—-WebKitFormBoundaryabc123(用于上传图片、文件)
  1. Content-Length(请求体长度)
    • 作用:指定请求体的字节数,服务器通过该头判断 “数据是否接收完整”,若实际接收长度与该值不匹配,可能会断开连接或报错。
    • 格式:Content-Length: [字节数]
    • 示例:请求体为{“name”:”zhangsan”}(16 个字符,UTF-8 编码下 16 字节),则Content-Length: 16
  1. Connection(连接控制)
    • 作用:指定请求完成后 “TCP 连接是否保持”,HTTP/1.1 默认开启长连接(keep-alive),减少频繁建立连接的开销。
    • 格式:Connection: keep-alive(长连接)或 Connection: close(短连接)
    • 示例:Connection: keep-alive

(三)安全验证类:证明 “我是合法的请求者”

  1. Cookie(客户端 Cookie 信息)
    • 作用:携带服务器之前通过Set-Cookie头设置在客户端的 “会话信息”(如登录状态、用户偏好),实现 “状态保持”(HTTP 协议本身是无状态的,Cookie 是实现状态的核心方式之一)。
    • 格式:Cookie: [键1]=[值1]; [键2]=[值2]; …(多个 Cookie 用分号分隔)
    • 示例:登录后携带会话 ID:Cookie: sessionId=abc123xyz; username=zhangsan
  1. Authorization(身份认证)
    • 作用:用于 “身份验证”,常见于 API 接口(如 RESTful API),告诉服务器 “我已通过认证,有权限访问”,支持多种认证方式(最常用 Basic 和 Bearer)。
    • 格式:
Basic 认证(Base64 编码用户名:密码):Authorization: Basic dXNlcjE6cGFzc3dvcmQx(解码后为user1:password1)
Bearer 认证(Token 认证,如 JWT):Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
    • 示例:JWT 认证请求:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNjk1MjE3MjAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

(四)性能优化类:让 “请求更高效”

  1. Cache-Control(缓存控制
    • 作用:客户端通过该头告诉服务器 “是否使用缓存”“缓存的规则”,减少重复请求,提升性能(也可用于响应头,后续响应头部分会补充)。
    • 常见取值:
no-cache:不使用本地缓存,需向服务器验证缓存是否有效(协商缓存);
no-store:完全不缓存,每次都请求新数据(如敏感信息);
max-age=[秒数]:本地缓存有效期,秒数内不请求服务器。
    • 示例:Cache-Control: no-cache(每次请求需服务器验证缓存)
  1. If-Modified-Since(协商缓存:最后修改时间)
    • 作用:配合响应头Last-Modified使用,属于 “协商缓存” 的关键头:客户端携带该头(值为上次响应的Last-Modified),服务器判断文件是否在该时间后修改 —— 若未修改,返回 304 Not Modified(不返回数据,直接用缓存);若已修改,返回 200 和新数据。
    • 格式:If-Modified-Since: [GMT时间]
    • 示例:If-Modified-Since: Wed, 11 Oct 2023 08:12:31 GMT
  1. If-None-Match(协商缓存:ETag 标识)
    • 作用:配合响应头ETag使用,比If-Modified-Since更精准(Last-Modified只能精确到秒,ETag 是文件内容的唯一哈希值):客户端携带上次响应的ETag,服务器对比当前文件的 ETag—— 一致则返回 304,不一致则返回 200 和新数据。
    • 格式:If-None-Match: “[ETag值]”(ETag 值需加引号)
    • 示例:If-None-Match: “5f8d72a3e4b0f1234567890abcdef”

三、常用 HTTP 响应头:服务器向客户端 “回什么”

HTTP 响应头由服务器发送给客户端,包含 “请求是否成功”“响应数据的格式”“缓存规则”“安全限制” 等关键信息,是客户端判断如何处理响应的重要依据。以下是 15 个最常用的响应头,按 “状态说明 – 数据描述 – 缓存控制 – 安全防护” 分类讲解:

(一)状态说明类:告诉客户端 “请求处理结果”

  1. Status(响应状态码
    • 注意:严格来说,Status是 “状态行” 的一部分(状态行格式:HTTP/1.1 [状态码] [状态描述]),但因与响应头关联紧密,常被归为 “响应状态信息”。
    • 作用:用数字代码表示 “请求的处理结果”,客户端通过状态码快速判断是否成功(如 2xx 成功、4xx 客户端错、5xx 服务器错)。
    • 常见状态码:
200 OK:请求成功(最常见);
302 Found:临时重定向(需跳转到其他 URL);
304 Not Modified:协商缓存命中(用本地缓存);
400 Bad Request:客户端请求格式错误(如参数缺失);
401 Unauthorized:未认证(需登录或携带 Token);
403 Forbidden:已认证但无权限访问;
404 Not Found:请求的资源不存在;
500 Internal Server Error:服务器内部错误(如代码报错)。
    • 示例:状态行:HTTP/1.1 200 OK
  1. Server(服务器信息)
    • 作用:标识服务器的 “软件类型或版本”(如 Nginx、Apache、Tomcat),部分服务器会隐藏具体版本以减少攻击风险。
    • 格式:Server: [服务器软件/版本]
    • 示例:Server: Nginx/1.21.4 或 Server: Apache-Coyote/1.1(Tomcat 默认)

(二)数据描述类:告诉客户端 “响应数据的情况”

  1. Content-Type(响应体格式)
    • 作用:与请求头的Content-Type对应,告诉客户端 “响应体的数据格式和编码”,客户端据此解析数据(如浏览器渲染 HTML、接口客户端解析 JSON)。
    • 格式:Content-Type: [MIME类型];charset=[编码]
    • 常见示例:
返回 HTML 页面:Content-Type: text/html;charset=utf-8
返回 JSON 数据:Content-Type: application/json;charset=utf-8
返回图片:Content-Type: image/jpeg(JPG 图)或 Content-Type: image/png(PNG 图)
  1. Content-Length(响应体长度)
    • 作用:指定响应体的字节数,客户端通过该头判断 “数据是否接收完整”,若接收长度不足,会尝试重新请求(部分场景)。
    • 格式:Content-Length: [字节数]
    • 示例:响应体为{“code”:200,”msg”:”success”}(23 字节),则Content-Length: 23
  1. Content-Encoding(响应体编码)
    • 作用:告诉客户端 “响应体是否经过压缩” 及 “压缩算法”(如 gzip、deflate),客户端需先解压再解析数据(开启压缩可大幅减少传输体积,提升速度)。
    • 格式:Content-Encoding: [压缩算法]
    • 示例:Content-Encoding: gzip

(三)缓存控制类:告诉客户端 “如何缓存响应数据”

  1. Cache-Control(缓存规则)
    • 作用:服务器通过该头强制指定 “客户端的缓存策略”,优先级高于其他缓存头(如Expires),是 HTTP/1.1 推荐的缓存控制方式。
    • 常见取值(响应头中):
public:允许所有缓存(如浏览器、CDN)缓存该响应;
private:仅允许客户端(如浏览器)缓存,不允许中间缓存(如 CDN);
max-age=[秒数]:缓存有效期(秒数内不请求服务器,优先级高于Expires);
no-cache:客户端需向服务器验证缓存(协商缓存);
no-store:完全不缓存(如登录页、支付页)。
    • 示例:静态资源(如 CSS、JS)缓存 1 小时:Cache-Control: public, max-age=3600
  1. Expires(缓存过期时间)
    • 作用:HTTP/1.0 的缓存头,指定 “缓存的绝对过期时间”(GMT 时间),若客户端时间超过该值,需重新请求服务器(优先级低于Cache-Control: max-age)。
    • 格式:Expires: [GMT时间]
    • 示例:缓存到 2023 年 10 月 12 日 8 点:Expires: Thu, 12 Oct 2023 08:00:00 GMT
  1. Last-Modified(资源最后修改时间)
    • 作用:配合请求头If-Modified-Since实现 “协商缓存”,告诉客户端 “该资源最后修改的 GMT 时间”,客户端下次请求会携带该时间供服务器判断。
    • 格式:Last-Modified: [GMT时间]
    • 示例:Last-Modified: Wed, 11 Oct 2023 08:12:31 GMT
  1. ETag(资源唯一标识)
    • 作用:配合请求头If-None-Match实现 “协商缓存”,是服务器对 “资源内容” 生成的唯一哈希值(如 MD5、SHA1),资源内容变化则 ETag 变化,比Last-Modified更精准。
    • 格式:ETag: “[哈希值]”(哈希值需加引号,部分服务器用 W / 前缀表示 “弱 ETag”,精度较低)
    • 示例:ETag: “5f8d72a3e4b0f1234567890abcdef” 或 `ETag: W/”5

购买须知/免责声明
1.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
2.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
3.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!
4.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
5.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
6.不保证任何源码框架的完整性。
7.侵权联系邮箱:aliyun6168@gail.com / aliyun666888@gail.com
8.若您最终确认购买,则视为您100%认同并接受以上所述全部内容。

海外源码网 源码资讯 学 HTTP 必看!常用请求头与响应头超全详解一篇搞懂 https://moyy.us/20106.html

相关文章