当前位置: 首页 > news >正文

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

文章目录

      • 一、HTTP 头部信息
        • 1. 通用头部(General Headers)
        • 2. 请求头部(Request Headers)
        • 3. 响应头部(Response Headers)
        • 4. 实体头部(Entity Headers)
      • 二、WebSocket 头部信息
        • 1. WebSocket 握手请求头部(客户端 → 服务器)
        • 2. WebSocket 握手响应头部(服务器 → 客户端)
        • 3. 握手后的通信:无 HTTP 头部
      • 三、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,用于跨域验证(服务器可据此限制跨域连接)

请求头部示例

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/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 头部彻底无关。
http://www.dtcms.com/a/419300.html

相关文章:

  • Linux系统学习之---库的理解和加载(毛坯初版...)
  • 南山模板网站建设公司怎么看网站的外链
  • 企业网站策划大纲模板文山住房和城乡建设局网站
  • Linux 基础IO与系统IO
  • 【IEDA】已解决:IDEA中jdk的版本切换
  • idea推荐springboot+mybatis+分页查询插件之PageHelper
  • 南非网站域名做网站微信支付多少钱
  • 网站开发 图形验证码网站建设衤金手指下拉10
  • OPenssh6代码移植的依赖库 OpenSSL双库连接问题的解决方案
  • 商务网站建设组成包括网站优化wordpress 换行
  • tiktok scheme
  • Xrdp 远程桌面配置【笔记】
  • 【Linux】倒计时和进度条实现
  • 网站建设需要用到哪些软件有哪些系统安装wordpress
  • 梯度下降(Gradient Descent)
  • 东莞市建设规划局网站游戏类企业网站模板
  • C++---bind(绑定函数或函数对象的参数)
  • 网站和域名网站开发技术是什么
  • 个人如何开网站西安网络推广外包公司
  • 国产处理器飞腾CPU各系列综合性能对比
  • 南宁网站设计推广wordpress+授权登录
  • 网站建设深圳哪里学品牌建设提升
  • 《LangChain入门指南》学习笔记1:第1章 LangChain:开启大语言模型时代的钥匙
  • 国清汇携手社保基金会推出《国脉相承·传世养老基金》
  • 3、内存系统详解 - 从DDR演进到GPU内存架构的认知基石
  • 芯片和半导体:Intel开始布局14A工艺
  • JavaWeb 课堂笔记 —— 26 SpringBoot 原理
  • 网上国网app下载安装哈尔滨seo优化排名
  • HTTP首部字段(速查-全47种)
  • 嘉兴高端网站定制100网站建设