本站所有源码均为自动秒发货,默认(百度网盘)
**
一、HTTP 头的基本认知:是什么?有什么用?
- 传递元数据:告诉对方(服务器 / 客户端)本次请求或响应的 “附加信息”,比如数据类型、数据长度、语言偏好等;
- 控制通信行为:决定数据传输的方式,比如是否缓存、是否保持连接、是否需要身份验证等;
- 保障安全性:通过特定头信息防御网络攻击,比如防止 XSS 攻击、CSRF 攻击、点击劫持等。
二、常用 HTTP 请求头:客户端向服务器 “说什么”
(一)基础信息类:告诉服务器 “请求的基本情况”
- User-Agent(用户代理)
-
- 作用:标识发送请求的客户端类型(浏览器、设备、程序),服务器可根据该头返回适配的内容(如移动端 / PC 端页面)。
-
- 格式:User-Agent: [客户端类型/版本] [操作系统] [其他信息]
-
- 示例:
- Host(目标主机)
-
- 作用:指定请求的目标服务器域名和端口(HTTP 默认 80,HTTPS 默认 443),是 HTTP/1.1 强制要求的请求头(没有会报错 400 Bad Request)。
-
- 格式:Host: [域名]:[端口](端口可选,默认端口可省略)
-
- 示例:Host: www.baidu.com 或 Host: api.example.com:8080
- Accept(可接受的响应格式)
-
- 作用:告诉服务器客户端能处理的 “响应数据类型”(MIME 类型),服务器会优先返回匹配的格式,若无匹配则返回 406 Not Acceptable。
-
- 格式:Accept: [MIME类型1];q=[权重1], [MIME类型2];q=[权重2](q 为权重,0-1,默认 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
(二)数据控制类:控制 “请求数据的传输方式”
- Content-Type(请求体格式)
-
- 作用:仅在 “有请求体” 的请求(如 POST、PUT)中使用,告诉服务器 “请求体的数据格式”,是接口开发中最容易出错的头之一(格式不匹配会导致服务器解析失败)。
-
- 格式:Content-Type: [MIME类型];charset=[编码](charset 可选,默认 UTF-8)
-
- 常见示例:
- Content-Length(请求体长度)
-
- 作用:指定请求体的字节数,服务器通过该头判断 “数据是否接收完整”,若实际接收长度与该值不匹配,可能会断开连接或报错。
-
- 格式:Content-Length: [字节数]
-
- 示例:请求体为{“name”:”zhangsan”}(16 个字符,UTF-8 编码下 16 字节),则Content-Length: 16
- Connection(连接控制)
-
- 作用:指定请求完成后 “TCP 连接是否保持”,HTTP/1.1 默认开启长连接(keep-alive),减少频繁建立连接的开销。
-
- 格式:Connection: keep-alive(长连接)或 Connection: close(短连接)
-
- 示例:Connection: keep-alive
(三)安全验证类:证明 “我是合法的请求者”
- Cookie(客户端 Cookie 信息)
-
- 作用:携带服务器之前通过Set-Cookie头设置在客户端的 “会话信息”(如登录状态、用户偏好),实现 “状态保持”(HTTP 协议本身是无状态的,Cookie 是实现状态的核心方式之一)。
-
- 格式:Cookie: [键1]=[值1]; [键2]=[值2]; …(多个 Cookie 用分号分隔)
-
- 示例:登录后携带会话 ID:Cookie: sessionId=abc123xyz; username=zhangsan
- Authorization(身份认证)
-
- 作用:用于 “身份验证”,常见于 API 接口(如 RESTful API),告诉服务器 “我已通过认证,有权限访问”,支持多种认证方式(最常用 Basic 和 Bearer)。
-
- 格式:
-
- 示例:JWT 认证请求:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNjk1MjE3MjAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
(四)性能优化类:让 “请求更高效”
- Cache-Control(缓存控制)
-
- 作用:客户端通过该头告诉服务器 “是否使用缓存”“缓存的规则”,减少重复请求,提升性能(也可用于响应头,后续响应头部分会补充)。
-
- 常见取值:
-
- 示例:Cache-Control: no-cache(每次请求需服务器验证缓存)
- 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
- 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 响应头:服务器向客户端 “回什么”
(一)状态说明类:告诉客户端 “请求处理结果”
- Status(响应状态码)
-
- 注意:严格来说,Status是 “状态行” 的一部分(状态行格式:HTTP/1.1 [状态码] [状态描述]),但因与响应头关联紧密,常被归为 “响应状态信息”。
-
- 作用:用数字代码表示 “请求的处理结果”,客户端通过状态码快速判断是否成功(如 2xx 成功、4xx 客户端错、5xx 服务器错)。
-
- 常见状态码:
-
- 示例:状态行:HTTP/1.1 200 OK
- Server(服务器信息)
-
- 作用:标识服务器的 “软件类型或版本”(如 Nginx、Apache、Tomcat),部分服务器会隐藏具体版本以减少攻击风险。
-
- 格式:Server: [服务器软件/版本]
-
- 示例:Server: Nginx/1.21.4 或 Server: Apache-Coyote/1.1(Tomcat 默认)
(二)数据描述类:告诉客户端 “响应数据的情况”
- Content-Type(响应体格式)
-
- 作用:与请求头的Content-Type对应,告诉客户端 “响应体的数据格式和编码”,客户端据此解析数据(如浏览器渲染 HTML、接口客户端解析 JSON)。
-
- 格式:Content-Type: [MIME类型];charset=[编码]
-
- 常见示例:
- Content-Length(响应体长度)
-
- 作用:指定响应体的字节数,客户端通过该头判断 “数据是否接收完整”,若接收长度不足,会尝试重新请求(部分场景)。
-
- 格式:Content-Length: [字节数]
-
- 示例:响应体为{“code”:200,”msg”:”success”}(23 字节),则Content-Length: 23
- Content-Encoding(响应体编码)
-
- 作用:告诉客户端 “响应体是否经过压缩” 及 “压缩算法”(如 gzip、deflate),客户端需先解压再解析数据(开启压缩可大幅减少传输体积,提升速度)。
-
- 格式:Content-Encoding: [压缩算法]
-
- 示例:Content-Encoding: gzip
(三)缓存控制类:告诉客户端 “如何缓存响应数据”
- Cache-Control(缓存规则)
-
- 作用:服务器通过该头强制指定 “客户端的缓存策略”,优先级高于其他缓存头(如Expires),是 HTTP/1.1 推荐的缓存控制方式。
-
- 常见取值(响应头中):
-
- 示例:静态资源(如 CSS、JS)缓存 1 小时:Cache-Control: public, max-age=3600
- Expires(缓存过期时间)
-
- 作用:HTTP/1.0 的缓存头,指定 “缓存的绝对过期时间”(GMT 时间),若客户端时间超过该值,需重新请求服务器(优先级低于Cache-Control: max-age)。
-
- 格式:Expires: [GMT时间]
-
- 示例:缓存到 2023 年 10 月 12 日 8 点:Expires: Thu, 12 Oct 2023 08:00:00 GMT
- Last-Modified(资源最后修改时间)
-
- 作用:配合请求头If-Modified-Since实现 “协商缓存”,告诉客户端 “该资源最后修改的 GMT 时间”,客户端下次请求会携带该时间供服务器判断。
-
- 格式:Last-Modified: [GMT时间]
-
- 示例:Last-Modified: Wed, 11 Oct 2023 08:12:31 GMT
- ETag(资源唯一标识)
-
- 作用:配合请求头If-None-Match实现 “协商缓存”,是服务器对 “资源内容” 生成的唯一哈希值(如 MD5、SHA1),资源内容变化则 ETag 变化,比Last-Modified更精准。
-
- 格式:ETag: “[哈希值]”(哈希值需加引号,部分服务器用 W / 前缀表示 “弱 ETag”,精度较低)
-
- 示例:ETag: “5f8d72a3e4b0f1234567890abcdef” 或 `ETag: W/”5