文章目录一、应用层基础1.1 应用层概念二、应用层协议设计2.1 网络通信协议概念2.2 如何自定义协议2.2.1 明确传输内容2.2.2 约定数据格式三、常见数据组织格式3.1 行文本格式示例请求格式示例响应格式商家列表3.2 XML格式示例请求示例响应优缺点3.3 JSON格式示例请求优缺点3.4 Protobuf格式核心特点优缺点3.5 数据格式总结四、HTTP协议4.1 HTTP基本特点4.2 抓包工具4.3 代理机制4.3.1 正向代理4.3.2 反向代理五、HTTP报文结构重点5.1 HTTP请求响应报文结构5.1.1 报文字段详解5.1.2 URL编码5.1.3 HTTP请求方法5.1.4 Host 字段5.1.5 Content-Length 字段5.1.6 Content-Type 字段5.1.7 User-Agent 字段5.1.8 Referer 字段5.1.9 Cookie 字段一、应用层基础1.1 应用层概念应用层是计算机网络体系结构如TCP/IP模型或OSI模型中的最高层也是直接与用户应用程序交互的那一层。应用层的核心任务就两件事当“快递小哥” —— 帮你把东西安全送到对方手上怎么装车、走哪条路、送没送到都由它管。当“翻译官” —— 保证双方说的是同一种语言、用同一种符号写字你说“苹果”对方不会听成“橘子”。二、应用层协议设计2.1 网络通信协议概念应用层中涉及到的很多网络通信协议是程序员自己定义的。2.2 如何自定义协议主要分为两个阶段2.2.1 明确传输内容根据需求明确要传输哪些信息。2.2.2 约定数据格式约定好信息组织的格式。例如点外卖阶段1 决定外卖订单上该写哪些项目用户、地址、餐品、价格…阶段2 决定这些项目按什么顺序、用什么分隔符、用什么语言三、常见数据组织格式3.1 行文本格式示例请求格式用户id, 用户的位置\n1000, 45E45N\n示例响应格式商家列表一个响应由多行构成每一行是一个商家商家id, 商家名称, 商家图片, 商家评分, 配送费用, 分类\n1, 杨国福麻辣烫, 商家图片1.jpg, 4.8, 5, 麻辣烫\n2, 大娘水饺, 商家图片2.jpg, 4.7, 0, 水饺\n3, 麦当劳, 商家图片3.jpg, 5.0, 10, 快餐\n注意实际约定时可以有很多变数。3.2 XML格式XML 允许你自定义标签结构非常适合在应用层作为请求/响应的数据表示格式。它的规则由通信双方共同商定不依赖浏览器或任何前端框架。示例请求requestuserid1000/useridposition75E75N/position/request示例响应responseshopid1/idname杨国福/nameimage1.jpg/imagerank5.0/ranksendprice5/sendprice/shop/response优缺点优点可读性好缺点冗余信息多占用带宽大3.3 JSON格式JSON 在可读性和带宽消耗之间取得了较好的平衡因此成为当前最流行的应用层数据组织方案。 但追求极致性能的场景仍会选择更紧凑的二进制格式如 Protobuf示例请求{userId:1000,position:75E75N}优缺点优点可读性好、比XML更省带宽缺点仍有一定冗余3.4 Protobuf格式核心特点基于二进制、无冗余信息优缺点优点最省带宽、解析速度快缺点可读性差、调试困难3.5 数据格式总结根据图片内容对四种数据组织格式的总结如下格式特点可读性冗余适用场景行文本最原始的方式用分隔符逗号、换行等组织数据较好较多简单命令、早期协议XML比较原始成对标签构成键值对结构可自定义标签好较多冗余信息多浪费带宽企业级集成SOAP、XMPP但已逐渐被替代JSON当下主流的方式键值对 数组结构清晰好一般仍有键名、引号、括号等冗余Java Web 开发的基本盘Spring / Spring Cloud 等框架都基于 JSONProtobuf高性能场景使用二进制压缩无冗余差最小最省带宽性能要求高的场景如 C 注重效率的项目选择格式取决于场景调试友好选 JSON/XML极致性能选 Protobuf极简场景可用行文本。Java Web 开发以 JSON 为主流C 高性能系统更倾向 Protobuf。四、HTTP协议4.1 HTTP基本特点一问一答的请求-响应模式请求和响应一一对应。4.2 抓包工具作用获取网络数据包并解析报文格式原理抓包工具相当于一个代理放在客户端和服务器之间把经过的请求和响应都拦截并展示出来。例如你客户端想访问某个网站服务器数据包实际上经过了抓包工具如 Wireshark、Charles、Fiddler工具可以复制一份数据给你看同时转发给服务器。4.3 代理机制4.3.1 正向代理代表客户端干活。客户端不直接访问服务器而是把请求发给代理服务器代理服务器再去访问目标服务器然后把结果返回给客户端。特点服务器不知道真正的客户端是谁只知道代理服务器。举个例子我客户端→ 我妹妹正向代理→ 超市老板服务器我妹妹代表我去买东西老板以为是我妹妹要买实际上是我。4.3.2 反向代理代表服务器干活。客户端不知道真正提供服务的服务器是哪台它只知道反向代理的地址。反向代理把请求转发给后端的真实服务器再把响应返回给客户端。举个例子你客户端还是想去那家公司办事。公司门口设了一个前台接待员反向代理。你走到前台说“我要办某某业务”。前台去后面找一个员工真实服务器帮你处理然后把结果转交给你。你全程只跟前台说话你根本不知道帮你办事的员工是张三、李四还是王五也不知道背后有多少个员工。五、HTTP报文结构重点例如 使用fiddler进行抓包对搜狗网页进行抓包5.1 HTTP请求响应报文结构请求报文结构1. 首行请求行 2. 请求头多个键值对 3. 空行一个空行标志头部结束 4. 正文可选比如 POST 请求的表单数据或 JSON请求页响应报文结构1. 首行状态行 2. 响应头多个键值对 3. 空行一个空行标志头部结束 4. 正文可选比如 HTML 页面、JSON 数据等响应页5.1.1 报文字段详解一个完整的URL统一资源定位符其标准结构如下protocol://hostname:port/path?query#fragment协议 (Protocol/Scheme)定义了访问资源所遵循的规则决定了浏览器与服务器之间的沟通方式。常见的协议包括http / https超文本传输协议用于访问网页。https 中的 ‘s’ 代表安全会对数据加密。ftp文件传输协议用于上传或下载文件。主机名 (Hostname)资源所在的服务器地址可以是域名如 cn.bing.com或IP地址如 192.0.2.1。域名需要通过DNS域名系统解析为IP地址才能访问。端口号 (Port)服务器上用于特定网络服务的“入口”。正如你注意到的关键点如果未指定则会使用默认端口其中http是80https是443。例如https://cn.bing.com/search 等同于 https://cn.bing.com:443/search。路径 (Path)资源在服务器上的具体位置通常由/分隔层级清晰。以/结尾通常指向一个目录或文件夹。不以/结尾则往往指向一个具体文件。例如/search 就像在告诉服务器“请调用‘search’这个功能”。查询字符串 (Query String)以?开头用于向服务器发送额外参数常出现于搜索结果页或动态页面。其结构是键值对keyvalue多个参数间用连接。例如?wdURLrsv_spt1 表示两个参数第一个wd的值为URL第二个rsv_spt的值为1。片段标识符 (Fragment)以#开头用于定位页面内的某个特定位置。例如 #section1 会直接滚动到页面上id为section1的部分。这部分不会被发送到服务器仅供浏览器内部使用举个例子必应搜索蓝桥杯的URLhttps://cn.bing.com/search?q%E8%93%9D%E6%A1%A5%E6%9D%AFformSWAUA2https: 协议名称cn.bing.com 要访问服务器的IP地址或域名search带有层次结构的路径q%E8%93%9D%E6%A1%A5%E6%9D%AFformSWAUA2查询字符串query String ,对要访问的资源进行补充说明。5.1.2 URL编码也叫百分号编码就是把URL里那些有特殊含义的符号、或者非英文字母比如中文转换成一种“%两个十六进制数”的格式保证网络传输时不会被误解。例如 搜索ab这里看见被编码成了%26查看UTF-8码表也是对应上了。5.1.3 HTTP请求方法方法说明支持的 HTTP 协议版本GET获取资源1.0、1.1POST传输实体主体1.0、1.1PUT传输文件1.0、1.1HEAD获得报文首部1.0、1.1DELETE删除文件1.0、1.1OPTIONS询问支持的方法1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINE断开连接关系1.0最常用的就是GET 和 POST。GET 与 POST 的对比表格对比维度GETPOST请求体 (body)一般没有有数据传递位置URL 查询字符串 (query string)请求体 (body)长度限制有浏览器/服务器限制通常几KB无可上传大文件安全性数据暴露在地址栏、历史记录、服务器日志中不适合敏感信息数据不在 URL 中相对安全但仍需 HTTPS 加密缓存可以被浏览器缓存默认不被缓存收藏夹 / 书签可以保存为书签包含完整参数不能保存为书签不包含请求体典型用途语义上获取资源HTML、CSS、JS、图片、搜索查询等提交数据登录表单、上传文件、创建/更新资源是否幂等是多次请求结果相同不改变服务器状态否多次请求可能产生多次资源创建实际开发灵活性有时也用来提交少量非敏感数据不推荐但可行也可以只获取数据如通过 body 传递复杂查询条件但不符合语义注幂等指连续执行多次请求的效果与执行一次相同。GET 通常用于只读操作因此是幂等的POST 可能创建多个资源不是幂等的。5.1.4 Host 字段表示服务器主机的地址和端口。注意URL 的域名用来找到 IP 地址路由 DNS。请求头里的 Host用来告诉服务器你要访问这个 IP 上的哪个具体网站因为一个 IP 可以挂很多网站。5.1.5 Content-Length 字段表示请求体body的字节长度。单位是字节。5.1.6 Content-Type 字段表示请求的body中的数据格式。提示了接收方如何解析body中的数据。5.1.7 User-Agent 字段表示了用户使用的设备浏览器和操作系统的情况。例如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0各部分的含义字段片段含义Mozilla/5.0兼容性标识历史原因几乎所有现代浏览器都声称是 Mozilla/5.0Windows NT 10.0操作系统版本Windows 10 / 11 都报告为 NT 10.0Win64; x64系统架构64 位 WindowsAppleWebKit/537.36浏览器内核WebKit 版本Chrome/147.0.0.0浏览器品牌和版本Chrome 147Safari/537.36Safari 兼容标识Edg/147.0.0.0Edge 浏览器版本如果通过 Edge 访问5.1.8 Referer 字段描述当前页面的来源。直接输入url 和 点收藏栏 是没有Referer的。示例在必应Bing搜索引擎中搜索可爱头像可以看见上面抓包出来了Referer,从必应页面跳转到了可爱头像页面。5.1.9 Cookie 字段为什么需要 CookieJS 的限制浏览器中的 JavaScript 代码无法直接访问用户硬盘的文件系统。原因这是一种安全限制“紧箍咒”防止恶意 JS 读取或篡改本地文件从而保护用户隐私和系统安全。Cookie是什么浏览器允许网页在本地硬盘存储少量数据的一种机制它不是让网页代码直接访问文件系统而是提供了一层抽象的数据存储接口。Cookie 采用键值对keyvalue的方式存储数据。例如登录流程首次验证全过程流程图实线箭头-表示请求虚线箭头–表示响应自循环Server-Server表示服务器内部处理1.用户提交登录信息用户在登录页面输入用户名/密码浏览器通过 POST 请求发送给服务器。2.服务器验证身份服务器查询数据库检查用户名密码是否有效。3.验证成功后的操作关键步骤生成 sessionId使用 UUID 等算法生成一个不易猜测的随机字符串。创建 session 对象在服务器内存或专用存储中新建一个 Session 对象。保存用户数据将当前登录用户的关键信息如 userId、userName存入该 Session 对象。建立映射以 sessionId 为 keySession 对象为 value存入服务器的全局哈希表或 Redis 等存储。下发 cookie服务器通过响应头 Set-Cookie: sessionIdxxxx 告知浏览器保存这个 sessionId。浏览器保存 cookie浏览器收到响应后将 sessionIdxxxx 以 Cookie 形式存储默认绑定当前域名。后续请求自动认证用户再次访问同一域名下的任何页面时浏览器自动在请求头中携带 Cookie: sessionIdxxxx。服务器收到请求后从 Cookie 中提取 sessionId。在本地的哈希表或 Redis中查找该 sessionId 对应的 Session 对象。如果找到直接从中取出用户信息如 userId就知道“这个请求是哪个用户发来的”。无需让用户重新登录。Set-Cookie是一个 HTTP 响应头字段由服务器发给浏览器作用是“让浏览器在本地保存一个 Cookie”。Session服务器端为每个用户会话创建的对象用于存储该用户的私有数据如用户ID、昵称、权限等。SessionId一个全局唯一的随机字符串通常用 UUID 算法生成作为 Session 对象的钥匙。简短总结流程图如下学习路上一起进步如果觉得内容不错记得点赞支持一下也可以关注我后续持续分享高质量技术文章
应用层协议详解(含HTTP):从自定义格式到报文抓包 | 超详细图解 | 适合小白
发布时间:2026/5/19 9:25:36
文章目录一、应用层基础1.1 应用层概念二、应用层协议设计2.1 网络通信协议概念2.2 如何自定义协议2.2.1 明确传输内容2.2.2 约定数据格式三、常见数据组织格式3.1 行文本格式示例请求格式示例响应格式商家列表3.2 XML格式示例请求示例响应优缺点3.3 JSON格式示例请求优缺点3.4 Protobuf格式核心特点优缺点3.5 数据格式总结四、HTTP协议4.1 HTTP基本特点4.2 抓包工具4.3 代理机制4.3.1 正向代理4.3.2 反向代理五、HTTP报文结构重点5.1 HTTP请求响应报文结构5.1.1 报文字段详解5.1.2 URL编码5.1.3 HTTP请求方法5.1.4 Host 字段5.1.5 Content-Length 字段5.1.6 Content-Type 字段5.1.7 User-Agent 字段5.1.8 Referer 字段5.1.9 Cookie 字段一、应用层基础1.1 应用层概念应用层是计算机网络体系结构如TCP/IP模型或OSI模型中的最高层也是直接与用户应用程序交互的那一层。应用层的核心任务就两件事当“快递小哥” —— 帮你把东西安全送到对方手上怎么装车、走哪条路、送没送到都由它管。当“翻译官” —— 保证双方说的是同一种语言、用同一种符号写字你说“苹果”对方不会听成“橘子”。二、应用层协议设计2.1 网络通信协议概念应用层中涉及到的很多网络通信协议是程序员自己定义的。2.2 如何自定义协议主要分为两个阶段2.2.1 明确传输内容根据需求明确要传输哪些信息。2.2.2 约定数据格式约定好信息组织的格式。例如点外卖阶段1 决定外卖订单上该写哪些项目用户、地址、餐品、价格…阶段2 决定这些项目按什么顺序、用什么分隔符、用什么语言三、常见数据组织格式3.1 行文本格式示例请求格式用户id, 用户的位置\n1000, 45E45N\n示例响应格式商家列表一个响应由多行构成每一行是一个商家商家id, 商家名称, 商家图片, 商家评分, 配送费用, 分类\n1, 杨国福麻辣烫, 商家图片1.jpg, 4.8, 5, 麻辣烫\n2, 大娘水饺, 商家图片2.jpg, 4.7, 0, 水饺\n3, 麦当劳, 商家图片3.jpg, 5.0, 10, 快餐\n注意实际约定时可以有很多变数。3.2 XML格式XML 允许你自定义标签结构非常适合在应用层作为请求/响应的数据表示格式。它的规则由通信双方共同商定不依赖浏览器或任何前端框架。示例请求requestuserid1000/useridposition75E75N/position/request示例响应responseshopid1/idname杨国福/nameimage1.jpg/imagerank5.0/ranksendprice5/sendprice/shop/response优缺点优点可读性好缺点冗余信息多占用带宽大3.3 JSON格式JSON 在可读性和带宽消耗之间取得了较好的平衡因此成为当前最流行的应用层数据组织方案。 但追求极致性能的场景仍会选择更紧凑的二进制格式如 Protobuf示例请求{userId:1000,position:75E75N}优缺点优点可读性好、比XML更省带宽缺点仍有一定冗余3.4 Protobuf格式核心特点基于二进制、无冗余信息优缺点优点最省带宽、解析速度快缺点可读性差、调试困难3.5 数据格式总结根据图片内容对四种数据组织格式的总结如下格式特点可读性冗余适用场景行文本最原始的方式用分隔符逗号、换行等组织数据较好较多简单命令、早期协议XML比较原始成对标签构成键值对结构可自定义标签好较多冗余信息多浪费带宽企业级集成SOAP、XMPP但已逐渐被替代JSON当下主流的方式键值对 数组结构清晰好一般仍有键名、引号、括号等冗余Java Web 开发的基本盘Spring / Spring Cloud 等框架都基于 JSONProtobuf高性能场景使用二进制压缩无冗余差最小最省带宽性能要求高的场景如 C 注重效率的项目选择格式取决于场景调试友好选 JSON/XML极致性能选 Protobuf极简场景可用行文本。Java Web 开发以 JSON 为主流C 高性能系统更倾向 Protobuf。四、HTTP协议4.1 HTTP基本特点一问一答的请求-响应模式请求和响应一一对应。4.2 抓包工具作用获取网络数据包并解析报文格式原理抓包工具相当于一个代理放在客户端和服务器之间把经过的请求和响应都拦截并展示出来。例如你客户端想访问某个网站服务器数据包实际上经过了抓包工具如 Wireshark、Charles、Fiddler工具可以复制一份数据给你看同时转发给服务器。4.3 代理机制4.3.1 正向代理代表客户端干活。客户端不直接访问服务器而是把请求发给代理服务器代理服务器再去访问目标服务器然后把结果返回给客户端。特点服务器不知道真正的客户端是谁只知道代理服务器。举个例子我客户端→ 我妹妹正向代理→ 超市老板服务器我妹妹代表我去买东西老板以为是我妹妹要买实际上是我。4.3.2 反向代理代表服务器干活。客户端不知道真正提供服务的服务器是哪台它只知道反向代理的地址。反向代理把请求转发给后端的真实服务器再把响应返回给客户端。举个例子你客户端还是想去那家公司办事。公司门口设了一个前台接待员反向代理。你走到前台说“我要办某某业务”。前台去后面找一个员工真实服务器帮你处理然后把结果转交给你。你全程只跟前台说话你根本不知道帮你办事的员工是张三、李四还是王五也不知道背后有多少个员工。五、HTTP报文结构重点例如 使用fiddler进行抓包对搜狗网页进行抓包5.1 HTTP请求响应报文结构请求报文结构1. 首行请求行 2. 请求头多个键值对 3. 空行一个空行标志头部结束 4. 正文可选比如 POST 请求的表单数据或 JSON请求页响应报文结构1. 首行状态行 2. 响应头多个键值对 3. 空行一个空行标志头部结束 4. 正文可选比如 HTML 页面、JSON 数据等响应页5.1.1 报文字段详解一个完整的URL统一资源定位符其标准结构如下protocol://hostname:port/path?query#fragment协议 (Protocol/Scheme)定义了访问资源所遵循的规则决定了浏览器与服务器之间的沟通方式。常见的协议包括http / https超文本传输协议用于访问网页。https 中的 ‘s’ 代表安全会对数据加密。ftp文件传输协议用于上传或下载文件。主机名 (Hostname)资源所在的服务器地址可以是域名如 cn.bing.com或IP地址如 192.0.2.1。域名需要通过DNS域名系统解析为IP地址才能访问。端口号 (Port)服务器上用于特定网络服务的“入口”。正如你注意到的关键点如果未指定则会使用默认端口其中http是80https是443。例如https://cn.bing.com/search 等同于 https://cn.bing.com:443/search。路径 (Path)资源在服务器上的具体位置通常由/分隔层级清晰。以/结尾通常指向一个目录或文件夹。不以/结尾则往往指向一个具体文件。例如/search 就像在告诉服务器“请调用‘search’这个功能”。查询字符串 (Query String)以?开头用于向服务器发送额外参数常出现于搜索结果页或动态页面。其结构是键值对keyvalue多个参数间用连接。例如?wdURLrsv_spt1 表示两个参数第一个wd的值为URL第二个rsv_spt的值为1。片段标识符 (Fragment)以#开头用于定位页面内的某个特定位置。例如 #section1 会直接滚动到页面上id为section1的部分。这部分不会被发送到服务器仅供浏览器内部使用举个例子必应搜索蓝桥杯的URLhttps://cn.bing.com/search?q%E8%93%9D%E6%A1%A5%E6%9D%AFformSWAUA2https: 协议名称cn.bing.com 要访问服务器的IP地址或域名search带有层次结构的路径q%E8%93%9D%E6%A1%A5%E6%9D%AFformSWAUA2查询字符串query String ,对要访问的资源进行补充说明。5.1.2 URL编码也叫百分号编码就是把URL里那些有特殊含义的符号、或者非英文字母比如中文转换成一种“%两个十六进制数”的格式保证网络传输时不会被误解。例如 搜索ab这里看见被编码成了%26查看UTF-8码表也是对应上了。5.1.3 HTTP请求方法方法说明支持的 HTTP 协议版本GET获取资源1.0、1.1POST传输实体主体1.0、1.1PUT传输文件1.0、1.1HEAD获得报文首部1.0、1.1DELETE删除文件1.0、1.1OPTIONS询问支持的方法1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINE断开连接关系1.0最常用的就是GET 和 POST。GET 与 POST 的对比表格对比维度GETPOST请求体 (body)一般没有有数据传递位置URL 查询字符串 (query string)请求体 (body)长度限制有浏览器/服务器限制通常几KB无可上传大文件安全性数据暴露在地址栏、历史记录、服务器日志中不适合敏感信息数据不在 URL 中相对安全但仍需 HTTPS 加密缓存可以被浏览器缓存默认不被缓存收藏夹 / 书签可以保存为书签包含完整参数不能保存为书签不包含请求体典型用途语义上获取资源HTML、CSS、JS、图片、搜索查询等提交数据登录表单、上传文件、创建/更新资源是否幂等是多次请求结果相同不改变服务器状态否多次请求可能产生多次资源创建实际开发灵活性有时也用来提交少量非敏感数据不推荐但可行也可以只获取数据如通过 body 传递复杂查询条件但不符合语义注幂等指连续执行多次请求的效果与执行一次相同。GET 通常用于只读操作因此是幂等的POST 可能创建多个资源不是幂等的。5.1.4 Host 字段表示服务器主机的地址和端口。注意URL 的域名用来找到 IP 地址路由 DNS。请求头里的 Host用来告诉服务器你要访问这个 IP 上的哪个具体网站因为一个 IP 可以挂很多网站。5.1.5 Content-Length 字段表示请求体body的字节长度。单位是字节。5.1.6 Content-Type 字段表示请求的body中的数据格式。提示了接收方如何解析body中的数据。5.1.7 User-Agent 字段表示了用户使用的设备浏览器和操作系统的情况。例如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0各部分的含义字段片段含义Mozilla/5.0兼容性标识历史原因几乎所有现代浏览器都声称是 Mozilla/5.0Windows NT 10.0操作系统版本Windows 10 / 11 都报告为 NT 10.0Win64; x64系统架构64 位 WindowsAppleWebKit/537.36浏览器内核WebKit 版本Chrome/147.0.0.0浏览器品牌和版本Chrome 147Safari/537.36Safari 兼容标识Edg/147.0.0.0Edge 浏览器版本如果通过 Edge 访问5.1.8 Referer 字段描述当前页面的来源。直接输入url 和 点收藏栏 是没有Referer的。示例在必应Bing搜索引擎中搜索可爱头像可以看见上面抓包出来了Referer,从必应页面跳转到了可爱头像页面。5.1.9 Cookie 字段为什么需要 CookieJS 的限制浏览器中的 JavaScript 代码无法直接访问用户硬盘的文件系统。原因这是一种安全限制“紧箍咒”防止恶意 JS 读取或篡改本地文件从而保护用户隐私和系统安全。Cookie是什么浏览器允许网页在本地硬盘存储少量数据的一种机制它不是让网页代码直接访问文件系统而是提供了一层抽象的数据存储接口。Cookie 采用键值对keyvalue的方式存储数据。例如登录流程首次验证全过程流程图实线箭头-表示请求虚线箭头–表示响应自循环Server-Server表示服务器内部处理1.用户提交登录信息用户在登录页面输入用户名/密码浏览器通过 POST 请求发送给服务器。2.服务器验证身份服务器查询数据库检查用户名密码是否有效。3.验证成功后的操作关键步骤生成 sessionId使用 UUID 等算法生成一个不易猜测的随机字符串。创建 session 对象在服务器内存或专用存储中新建一个 Session 对象。保存用户数据将当前登录用户的关键信息如 userId、userName存入该 Session 对象。建立映射以 sessionId 为 keySession 对象为 value存入服务器的全局哈希表或 Redis 等存储。下发 cookie服务器通过响应头 Set-Cookie: sessionIdxxxx 告知浏览器保存这个 sessionId。浏览器保存 cookie浏览器收到响应后将 sessionIdxxxx 以 Cookie 形式存储默认绑定当前域名。后续请求自动认证用户再次访问同一域名下的任何页面时浏览器自动在请求头中携带 Cookie: sessionIdxxxx。服务器收到请求后从 Cookie 中提取 sessionId。在本地的哈希表或 Redis中查找该 sessionId 对应的 Session 对象。如果找到直接从中取出用户信息如 userId就知道“这个请求是哪个用户发来的”。无需让用户重新登录。Set-Cookie是一个 HTTP 响应头字段由服务器发给浏览器作用是“让浏览器在本地保存一个 Cookie”。Session服务器端为每个用户会话创建的对象用于存储该用户的私有数据如用户ID、昵称、权限等。SessionId一个全局唯一的随机字符串通常用 UUID 算法生成作为 Session 对象的钥匙。简短总结流程图如下学习路上一起进步如果觉得内容不错记得点赞支持一下也可以关注我后续持续分享高质量技术文章