目录
[一、请求头部(Request Headers)](#一、请求头部(Request Headers))
[8、Accept 系列](#8、Accept 系列)
[二、响应头部(Response Headers)](#二、响应头部(Response Headers))
[三、连接管理:Keep-Alive 与 HTTP 持久连接](#三、连接管理:Keep-Alive 与 HTTP 持久连接)
[1、Host 的必要性](#1、Host 的必要性)
[六、HTTP 报头中的 Connection 字段](#六、HTTP 报头中的 Connection 字段)
[2、持久连接在不同 HTTP 版本中的表现](#2、持久连接在不同 HTTP 版本中的表现)
[Connection: keep-alive](#Connection: keep-alive)
[Connection: close](#Connection: close)
HTTP 请求与响应报文中的 Header(头部字段)扮演着非常重要的角色,它们用于传递附加信息、控制连接行为、描述内容类型、管理会话状态等。
一、请求头部(Request Headers)

1、Host
-
作用:指定目标服务器的域名(或IP地址)及端口号。
-
示例:

-
说明:
-
在 HTTP/1.1 中为必需字段,一个请求必须指明访问的主机。
-
主要用于虚拟主机服务,即一台服务器托管多个域名时,根据
Host区分不同网站。 -
也用于代理服务器转发请求时,告知目标服务器客户端实际想要访问的地址。
-
HTTP请求中的Host字段用于指明目标服务的IP地址和端口号。例如,当浏览器访问服务器时,请求头中的Host字段就会包含服务器的IP和端口信息。
这里可能产生一个疑问:既然客户端就是要访问服务器,为何还需要额外告知服务器目标地址?原因在于某些服务器实际上扮演着代理角色。这类代理服务器会代替客户端向其他服务器发起请求,再将响应结果返回给客户端。在这种情况下,客户端必须明确告知代理服务器真实的目标服务地址,此时Host字段的作用就体现出来了。
2、User-Agent
-
作用:描述客户端软件信息,包括操作系统、浏览器类型及版本、渲染引擎等。
-
常见格式:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
-
应用场景:
-
服务器可据此返回适配的页面内容(如移动端或桌面端)。
-
下载站点自动推荐与系统匹配的软件版本。
-
统计分析用户设备分布。
-
User-Agent用于标识客户端的操作系统和浏览器版本信息。例如,当用户通过电脑下载软件时,网站会自动显示与用户操作系统匹配的版本。这是因为请求中包含User-Agent字段,其中包含了主机信息,网站据此推送相应的软件版本。
3、Referer(注意:拼写错误源于早期规范,现已保留)
-
作用:表示当前请求是从哪个页面链接而来的。
-
示例:
Referer: https://www.google.com/
-
用途:
-
用于流量来源分析、广告追踪。
-
防止图片盗链(服务器可检查
Referer是否来自自身域名)。 -
注意隐私问题,部分浏览器提供"不发送 Referer"选项。
-
Referer(来源页)表示用户是从哪个页面跳转至当前页面的。记录上一页面信息主要有两大作用:一是便于用户返回操作,二是能分析当前页面与来源页面之间的关联性。
4、Cookie
-
作用 :携带服务器之前通过
Set-Cookie设置的小段数据。 -
工作机制:
-
服务器响应头中包含
Set-Cookie: sessionid=abc123。 -
客户端后续请求自动附带
Cookie: sessionid=abc123。
-
-
主要用途:会话管理、个性化设置、用户追踪、存储信息
5、Content-Type(请求中)
-
作用 :声明请求体的媒体类型,常见于 POST、PUT 等方法。
-
示例:
Content-Type: application/json Content-Type: multipart/form-data; boundary=...
6、Content-Length(请求中)
-
作用 :指明请求体的字节长度,便于服务器正确读取数据。

7、Authorization
-
作用:携带身份凭证,如 Bearer Token、Basic 认证信息。
-
示例:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
8、Accept 系列
-
Accept :客户端能处理的响应内容类型,如
application/json, text/html。 -
Accept-Encoding :支持的压缩算法,如
gzip, deflate。 -
Accept-Language :偏好语言,如
zh-CN, en-US;q=0.9。
9、Connection
-
作用:控制本次连接是否保持活动状态。
-
常用值:
-
keep-alive:要求保持连接,以便复用。 -
close:请求完成后关闭连接。
-
二、响应头部(Response Headers)

1、Content-Type

-
作用 :声明响应体的媒体类型,指导客户端如何解析内容。
-
常见值:
-
text/html; charset=utf-8 -
application/json -
image/png
-
2、Content-Length
-
作用 :指明响应体的字节长度,便于客户端正确接收数据。

3、Location
-
作用 :配合 3xx 重定向状态码,告知客户端下一步应跳转的 URL。
-
示例:
HTTP/1.1 302 Found Location: https://new.example.com/
4、Set-Cookie

-
作用:服务器向客户端设置 Cookie。
-
可选属性:
-
Expires/Max-Age:有效期。 -
Domain/Path:作用范围。 -
Secure:仅 HTTPS 发送。 -
HttpOnly:禁止 JavaScript 访问。
-
5、Cache-Control

-
作用:指导客户端和代理服务器如何缓存响应。
-
常用指令:
-
max-age=3600:缓存有效时间(秒)。 -
no-cache:需先向服务器验证。 -
no-store:禁止任何缓存。
-
6、Server
-
作用:描述服务器软件信息。
-
示例:
Server: nginx/1.18.0
7、Access-Control-Allow-Origin
-
作用:CORS(跨域资源共享)相关,指定允许访问该资源的来源。
-
示例:
Access-Control-Allow-Origin: https://www.example.com
三、连接管理:Keep-Alive 与 HTTP 持久连接
1、背景
-
HTTP/1.0 默认使用"短连接":每次请求需建立新 TCP 连接,响应后立即关闭,效率低下。
-
HTTP/1.1 默认启用"持久连接"(长连接):同一 TCP 连接可传输多个请求/响应,减少握手开销。
2、实现方式
-
请求头中设置
Connection: keep-alive(HTTP/1.1 默认支持,可省略)。 -
服务器响应头也可包含
Connection: keep-alive表示同意。 -
任意一方发送
Connection: close即关闭连接。
3、优点
-
减少 TCP 握手次数,降低延迟。
-
允许请求"管道化"(pipelining,但浏览器默认多未启用)。
HTTP/1.0采用请求-响应模式进行通信,其典型工作流程是:客户端先与服务器建立连接,发送请求后,服务器返回响应并立即断开连接。
然而,这种每次交互都重新建立连接的方式会造成资源浪费。为此,HTTP/1.1引入了长连接机制。长连接允许客户端在建立连接后,通过同一连接发送多个HTTP请求,服务器则按顺序处理这些请求,从而显著提升了通信效率。
在HTTP协议中,当请求或响应头部的Connection字段值为Keep-Alive时,即表示支持长连接功能。
四、补充说明
1、Host 的必要性
-
在虚拟主机环境中,多个域名可能指向同一 IP,服务器依赖
Host区分不同网站。 -
代理服务器转发请求时,必须保留原始
Host,否则目标服务器无法正确响应。
2、安全与隐私
-
User-Agent和Referer可能泄露用户信息,现代浏览器提供限制发送的选项。 -
敏感信息(如身份凭证)应避免通过 URL 或普通 Cookie 传递,建议使用 HTTPS + Secure Cookie。
3、协议发展
-
HTTP/2 进一步优化,支持多路复用,不再依赖多个 TCP 连接提升性能。
-
HTTP/3 基于 QUIC 协议,减少队头阻塞,提升移动网络下的性能。
五、快速查阅表格
| Header 名称 | 类别 | 说明 |
|---|---|---|
| Host | 请求 | 目标主机(域名:端口),HTTP/1.1 必需 |
| User-Agent | 请求 | 客户端软件标识(操作系统、浏览器等) |
| Referer | 请求 | 来源页面 URL |
| Cookie | 请求 | 携带之前服务器设置的 Cookie 数据 |
| Content-Type | 请求/响应 | 请求体或响应体的媒体类型(如 application/json) |
| Content-Length | 请求/响应 | 请求体或响应体的字节大小 |
| Location | 响应 | 重定向目标 URL(配合 3xx 状态码) |
| Set-Cookie | 响应 | 服务器设置 Cookie |
| Cache-Control | 响应 | 缓存控制策略(如 max-age=3600) |
| Connection | 请求/响应 | 控制连接是否保持(keep-alive / close) |
通过深入理解这些常见 HTTP Header,开发者可以更好地控制请求与响应行为,优化 Web 应用性能,并提升安全性。
六、HTTP 报头中的 Connection 字段
在 HTTP 协议中,Connection 报头是 HTTP 报文头的重要组成部分,主要用于控制和管理客户端与服务器之间的网络连接行为。它不仅决定了当前请求/响应结束后是否关闭连接,还在持久连接的管理中扮演关键角色。
1、核心作用
Connection 报头的主要作用体现在两个方面:
-
控制连接关闭行为:明确指示在当前 HTTP 请求/响应事务完成后,客户端与服务器之间的 TCP 连接是否应该立即关闭。
-
管理持久连接:用于管理持久连接(Persistent Connection,也称为长连接)。持久连接允许客户端和服务器在完成一次请求/响应交互后,不立即关闭 TCP 连接,而是保持连接处于打开状态,以便后续的请求和响应可以复用同一个连接,从而减少重复建立和关闭连接所带来的开销,提高通信效率。
2、持久连接在不同 HTTP 版本中的表现
HTTP/1.1
-
在 HTTP/1.1 协议中,默认使用持久连接。
-
这意味着当客户端发起一个 HTTP 请求,服务器进行响应后,如果双方都没有明确指定关闭连接,连接将保持打开状态。
-
后续客户端可以继续通过这个已经建立的连接发送新的 HTTP 请求,服务器也会通过同一连接返回相应的响应。
-
这种机制有效地减少了 TCP 连接建立和断开的次数,降低了网络延迟和资源消耗,提升了网页加载速度等性能指标。
HTTP/1.0
-
在 HTTP/1.0 协议中,默认连接是非持久的。
-
即每次 HTTP 请求/响应完成后,TCP 连接会自动关闭。
-
如果希望在 HTTP/1.0 上实现类似 HTTP/1.1 的持久连接功能,需要在请求头中显式设置
Connection: keep-alive。 -
当服务器收到带有此报头的请求时,如果支持持久连接,就会在响应中也包含
Connection: keep-alive,从而保持连接不关闭,以便后续复用。
3、语法格式
Connection 报头的取值主要有以下两种:
Connection: keep-alive
-
当客户端或服务器在报头中设置
Connection: keep-alive时,表示希望保持当前的 TCP 连接,以便后续可以继续通过该连接进行 HTTP 通信。 -
例如,客户端在发送请求时添加此报头,就是向服务器表明希望复用此连接发送更多请求;服务器在响应中添加此报头,则是同意保持连接,允许客户端后续复用。
Connection: close
-
若报头值为
Connection: close,则表示在当前请求/响应完成后,应该关闭 TCP 连接。 -
这意味着本次通信结束后,客户端和服务器之间的连接将被终止,后续若要进行新的 HTTP 通信,需要重新建立 TCP 连接。
4、实际应用与注意事项
实际应用场景
-
在网页浏览中,当浏览器加载一个包含多个资源(如图片、脚本、样式表等)的网页时,持久连接可以显著提高加载效率。
-
浏览器可以通过同一个 TCP 连接依次请求这些资源,而无需为每个资源都单独建立和关闭连接,减少了网络往返时间(RTT)和服务器资源占用。
-
对于一些实时性要求较高的应用,如在线游戏、即时通讯等,持久连接可以保持客户端与服务器之间的稳定通信通道,方便及时推送数据更新。
注意事项
-
虽然持久连接有很多优点,但也不能无限制地保持连接。
-
服务器通常会有一些机制来管理持久连接的数量和超时时间,以防止资源耗尽。
-
例如,服务器可能会设置一个最大连接数,当达到该数量时,新的连接请求可能会被拒绝或等待;同时,服务器也会设置一个连接超时时间,如果在该时间内没有新的请求通过该连接发送,服务器会自动关闭连接。
-
客户端在使用持久连接时,也应该合理控制请求的发送频率和方式,避免过度占用服务器资源。例如,在不需要持续通信时,及时关闭连接或者按照服务器的要求进行操作。
总之,Connection 报头在 HTTP 通信中起着至关重要的连接管理作用,理解并合理运用它,对于优化网络性能、提高通信效率具有重要意义。
七、关于HTTP常见header的表格
| 字段名 | 含义 | 样例 |
|---|---|---|
| Accept | 客户端可接受的响应内容类型 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8 |
| Accept-Encoding | 客户端支持的数据压缩格式 | Accept-Encoding: gzip, deflate, br |
| Accept-Language | 客户端可接受的语言类型 | Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 |
| Host | 请求的主机名和端口号 | Host: http://www.example.com:8080 |
| User-Agent | 客户端的软件环境信息 | User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 |
| Cookie | 客户端发送给服务器的HTTP cookie信息 | Cookie: session_id=abcdefg12345; user_id=123 |
| Referer | 请求的来源URL | Referer: http://www.example.com/previous_page.html |
| Content-Type | 实体主体的媒体类型 | Content-Type: application/x-www-form-urlencoded (对于表单提交) 或 Content-Type: application/json (对于JSON数据) |
| Content-Length | 实体主体的字节大小 | Content-Length: 150 |
| Authorization | 认证信息,如用户名和密码 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== (Base64编码后的用户名:密码) |
| Cache-Control | 缓存控制指令。请求时:Cache-Control: no-cache 或 Cache-Control: max-age=3600 ;响应时:Cache-Control: public, max-age=3600 | Cache-Control: public, max-age=3600(示例以响应时为例) |
| Connection | 请求完后是关闭还是保持连接 | Connection: keep-alive 或 Connection: close |
| Date | 请求或响应的日期和时间 | Date: Wed, 21 Oct 2023 07:28:00 GMT |
| Location | 重定向的目标URL(与3xx状态码配合使用) | Location: http://www.example.com/new_location.html (与302状态码配合使用) |
| Server | 服务器类型 | Server: Apache/2.4.41 (Unix) |
| Last-Modified | 资源的最后修改时间 | Last-Modified: Wed, 21 Oct 2023 07:20:00 GMT |
| ETag | 资源的唯一标识符,用于缓存 | ETag: "3f80f-1b6-5f4e2512a4100" |
| Expires | 响应过期的日期和时间 | Expires: Wed, 21 Oct 2023 08:28:00 GMT |