介绍一下HTTP和WebSocket的头部信息

文章目录

      • [一、HTTP 头部信息](#一、HTTP 头部信息)
        • [1. 通用头部(General Headers)](#1. 通用头部(General Headers))
        • [2. 请求头部(Request Headers)](#2. 请求头部(Request Headers))
        • [3. 响应头部(Response Headers)](#3. 响应头部(Response Headers))
        • [4. 实体头部(Entity Headers)](#4. 实体头部(Entity Headers))
      • [二、WebSocket 头部信息](#二、WebSocket 头部信息)
        • [1. WebSocket 握手请求头部(客户端 → 服务器)](#1. WebSocket 握手请求头部(客户端 → 服务器))
        • [2. WebSocket 握手响应头部(服务器 → 客户端)](#2. WebSocket 握手响应头部(服务器 → 客户端))
        • [3. 握手后的通信:无 HTTP 头部](#3. 握手后的通信:无 HTTP 头部)
      • [三、HTTP 与 WebSocket 头部的核心区别](#三、HTTP 与 WebSocket 头部的核心区别)
      • 总结

HTTP 和 WebSocket 的头部信息在结构、用途和生命周期上存在显著差异。HTTP 头部贯穿于每次请求-响应过程,而 WebSocket 头部主要用于 初始握手阶段 ,握手成功后则不再使用 HTTP 头部格式通信。

一、HTTP 头部信息

HTTP 头部是客户端与服务器在请求(Request)和响应(Response)中传递元数据的载体,由键值对Key: Value)组成,位于请求行/响应行之后、请求体/响应体之前(以空行分隔)。

根据功能,HTTP 头部可分为以下几类:

1. 通用头部(General Headers)

适用于请求和响应,传递跨消息的基础信息。

头部字段 说明
Date 消息发送的日期和时间(GMT 格式),如 Date: Wed, 28 Sep 2025 08:00:00 GMT
Connection 控制连接状态,常见值: - close:响应后关闭连接(HTTP/1.0 默认) - keep-alive:维持持久连接(HTTP/1.1 默认)
Cache-Control 控制缓存策略,如 no-cache(不缓存)、max-age=3600(缓存1小时)
Transfer-Encoding 消息体的传输编码方式,如 chunked(分块传输,用于未知长度的响应体)
2. 请求头部(Request Headers)

仅由客户端发送,传递请求相关的信息(如客户端身份、期望响应格式等)。

头部字段 说明
Host 服务器的域名和端口(HTTP/1.1 必需),如 Host: www.example.com:8080
User-Agent 客户端的浏览器/设备信息,如 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36
Accept 客户端可接受的响应数据格式,如 Accept: application/json, text/html
Accept-Encoding 客户端支持的压缩算法,如 Accept-Encoding: gzip, deflate
Authorization 身份认证信息,如 Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...(JWT 令牌)
Cookie 客户端存储的会话信息,由服务器通过 Set-Cookie 响应头设置,如 Cookie: sessionId=abc123; username=user
Referer 当前请求的来源页面(防盗链常用),如 Referer: https://www.google.com/
3. 响应头部(Response Headers)

仅由服务器发送,传递响应相关的信息(如服务器身份、响应格式等)。

头部字段 说明
Server 服务器的软件信息,如 Server: Nginx/1.21.6Server: Apache/2.4.54
Content-Type 响应体的数据类型(MIME 类型),如: - 文本:text/html; charset=utf-8 - JSON:application/json - 图片:image/jpeg
Content-Length 响应体的字节长度(若已知),如 Content-Length: 1024
Set-Cookie 服务器向客户端设置 Cookie,如 Set-Cookie: sessionId=abc123; Max-Age=3600; HttpOnly
Location 重定向的目标 URL(配合 3xx 状态码),如 Location: https://www.new-example.com
Access-Control-Allow-Origin 跨域资源共享(CORS)配置,如 *(允许所有域名)或 https://www.allowed.com
4. 实体头部(Entity Headers)

描述请求体/响应体的元数据(HTTP/1.1 定义,HTTP/2 后逐渐整合到通用/响应头部)。

  • Content-Encoding:响应体的压缩方式(与请求头 Accept-Encoding 对应),如 gzip
  • Last-Modified:资源的最后修改时间,如 Last-Modified: Tue, 27 Sep 2025 12:00:00 GMT

二、WebSocket 头部信息

WebSocket 协议的核心是基于 HTTP 握手建立连接 ,因此仅在握手阶段使用 HTTP 格式的头部;握手成功后,通信使用 WebSocket 专用的帧格式,不再包含 HTTP 头部。

1. WebSocket 握手请求头部(客户端 → 服务器)

核心是告知服务器"请求升级为 WebSocket 协议",关键字段如下:

头部字段 说明
Host 同 HTTP 请求头,指定服务器域名和端口
Upgrade 必需,值为 websocket,表示请求升级协议类型
Connection 必需,值为 Upgrade,配合 Upgrade 头确认升级意图
Sec-WebSocket-Key 必需,客户端生成的随机字符串(Base64 编码),用于服务器验证握手合法性(避免伪请求)
Sec-WebSocket-Version 必需,指定 WebSocket 协议版本(通常为 13,现代浏览器均支持)
Origin 可选,同 HTTP 的 Origin,用于跨域验证(服务器可据此限制跨域连接)

请求头部示例

http 复制代码
GET /ws-endpoint HTTP/1.1
Host: www.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: https://www.client.com
2. WebSocket 握手响应头部(服务器 → 客户端)

服务器确认升级协议,返回握手成功的响应(状态码必须为 101 Switching Protocols),关键字段如下:

头部字段 说明
Upgrade 必需,值为 websocket,确认协议升级
Connection 必需,值为 Upgrade,配合确认升级
Sec-WebSocket-Accept 必需,服务器对 Sec-WebSocket-Key 的处理结果: 1. 将 Sec-WebSocket-Key 与固定字符串 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接; 2. 对拼接后的字符串做 SHA-1 哈希; 3. 将哈希结果做 Base64 编码,得到该字段值。 客户端会验证此值,确保握手来自合法服务器。

响应头部示例

http 复制代码
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
3. 握手后的通信:无 HTTP 头部

握手成功后,客户端与服务器通过 WebSocket 帧(Frame)通信,帧格式包含 opcode(操作码,如文本/二进制数据)、掩码(客户端发送数据必需)、数据长度等字段,不再有 HTTP 头部的键值对结构,因此通信开销远低于 HTTP 的反复请求-响应。

三、HTTP 与 WebSocket 头部的核心区别

维度 HTTP 头部 WebSocket 头部
生命周期 每次请求-响应均携带(贯穿通信全程) 仅用于初始握手阶段,握手后不再使用
核心用途 传递请求/响应的元数据(如身份、格式、缓存) 仅用于协商协议升级(确认 WebSocket 连接)
关键特征 键值对结构,随请求/响应动态变化 固定的握手专用字段(如 UpgradeSec-WebSocket-Key
数据开销 每次通信均需携带(头部可能占较大比例) 仅握手阶段有开销,后续通信无头部开销

总结

  • HTTP 头部是请求-响应模式的"元数据载体",每次通信都离不开它,用于控制缓存、身份认证、数据格式等核心逻辑;
  • WebSocket 头部是**"协议升级的敲门砖"**,仅在握手时借用 HTTP 头部格式完成连接建立,一旦进入实时通信阶段,就与 HTTP 头部彻底无关。
相关推荐
Bruce_Liuxiaowei2 小时前
Kerberos协议深度解析:工作原理与安全实践
运维·windows·安全·网络安全
HaleyTiger3 小时前
新电脑(包含联想电脑)访问正常的系统加载不出页面,但是网络telnet又是通畅的(PG数据库连接public模式下能看到表及数据,其他模式下的表和数据看不了)
网络
ajassi20005 小时前
开源 C# 快速开发(十一)线程
http·开源·c#
问道飞鱼6 小时前
【服务器知识】HTTP 请求头信息及其用途详细说明
运维·服务器·nginx·http·http头信息
鸠摩智首席音效师13 小时前
如何在 Apache 中启用 HSTS 以增强网络安全性 ?
网络·apache
alex10013 小时前
Context Compliance Attack:大模型安全的新兴威胁与防御策略
网络·安全·web安全
追逐梦想的小孩17 小时前
从零开始学华为:Console口连接设备
网络·华为·交换机
Boilermaker199217 小时前
【Java】网络编程(5)
网络
lpfasd12319 小时前
SSL证书有效期缩短至200天的影响
网络·网络协议·ssl