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

计算机网络自顶向下方法8——应用层 HTTP报文格式与cookie机制

HTTP协议深度解析(二):报文格式与Cookie机制

本文详细拆解HTTP请求和响应报文的每个组成部分,并深入分析用户状态维护的核心机制:Cookie。

一、HTTP报文格式:网络通信的"信封"

HTTP报文有两种类型:请求报文响应报文。它们都遵循相同的基本格式:

起始行
首部字段(0个或多个)
空行(CRLF)
报文主体(可选)

二、HTTP请求报文详解

1. 请求报文完整结构

GET /index.html HTTP/1.1\r\n
Host: www.example.com\r\n
User-Agent: Mozilla/5.0\r\n
Accept: text/html,application/xhtml+xml\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Connection: keep-alive\r\n
\r\n
(请求主体 - 对于GET请求通常为空)

2. 请求行(起始行)

格式:方法 SP 请求URI SP HTTP版本 CRLF

方法类型

方法描述是否安全是否幂等
GET获取资源
POST提交数据
PUT替换资源
DELETE删除资源
HEAD获取首部
OPTIONS查询支持方法

重要概念

  • 安全:不应改变服务器状态(如GET、HEAD)

  • 幂等:多次执行效果相同(如GET、PUT、DELETE)

3. 请求首部字段

常用请求首部

Host: www.example.com                    # 目标主机(必需)
User-Agent: Mozilla/5.0 ...             # 客户端信息
Accept: text/html,application/xhtml+xml  # 可接受的内容类型
Accept-Encoding: gzip, deflate          # 可接受的内容编码
Accept-Language: zh-CN,en;q=0.8         # 可接受的语言(q值表示权重)
Connection: keep-alive                  # 连接控制
Content-Type: application/json          # 请求主体的类型
Content-Length: 128                     # 请求主体的长度
Cookie: name=value; sessionid=abc123    # 客户端Cookie

三、HTTP响应报文详解

1. 响应报文完整结构

HTTP/1.1 200 OK\r\n
Date: Mon, 23 Oct 2023 08:00:00 GMT\r\n
Server: Apache/2.4.1\r\n
Content-Type: text/html; charset=utf-8\r\n
Content-Length: 2156\r\n
Set-Cookie: sessionid=abc123; Path=/; HttpOnly\r\n
\r\n
<!DOCTYPE html>
<html>
...
</html>

2. 状态行(起始行)

格式:HTTP版本 SP 状态码 SP 原因短语 CRLF

状态码分类

范围类别描述
1xx信息性请求已接收,继续处理
2xx成功请求成功处理
3xx重定向需要进一步操作
4xx客户端错误客户端请求有误
5xx服务器错误服务器处理失败

重要状态码详解

200 OK                          # 请求成功
201 Created                     # 资源创建成功
301 Moved Permanently           # 永久重定向
302 Found                       # 临时重定向
304 Not Modified                # 资源未修改(缓存相关)
400 Bad Request                 # 请求语法错误
401 Unauthorized                # 需要认证
403 Forbidden                   # 服务器拒绝请求
404 Not Found                   # 资源不存在
500 Internal Server Error       # 服务器内部错误
503 Service Unavailable         # 服务不可用

3. 响应首部字段

常用响应首部

Date: Mon, 23 Oct 2023 08:00:00 GMT     # 响应生成时间
Server: Apache/2.4.1                    # 服务器软件信息
Content-Type: text/html; charset=utf-8  # 实体主体的类型
Content-Length: 2156                    # 实体主体的长度
Content-Encoding: gzip                  # 实体主体的编码方式
Last-Modified: Mon, 16 Oct 2023 10:00:00 GMT # 资源最后修改时间
Location: https://new.example.com       # 重定向目标(用于3xx)
Set-Cookie: ...                         # 设置Cookie
Cache-Control: max-age=3600            # 缓存控制

四、用户状态维护:Cookie机制深度解析

1. 为什么需要Cookie?

HTTP是无状态协议,但很多Web应用需要维护用户状态:

  • 用户登录状态

  • 购物车内容

  • 个性化设置

  • 会话跟踪

2. Cookie的工作原理

设置Cookie

客户端请求 → 服务器响应包含Set-Cookie头 → 客户端存储Cookie

使用Cookie

客户端请求包含Cookie头 → 服务器读取Cookie → 返回个性化内容

3. Set-Cookie首部详解

Set-Cookie: sessionid=abc123; Path=/; Domain=.example.com; Max-Age=3600; Secure; HttpOnly; SameSite=Lax

属性说明

属性描述示例
name=valueCookie的名称和值(必需)sessionid=abc123
Expires过期时间(绝对时间)Expires=Wed, 21 Oct 2023 07:28:00 GMT
Max-Age存活时间(秒,相对时间)Max-Age=3600
Domain适用的域名Domain=.example.com
Path适用的路径Path=/shop
Secure仅通过HTTPS传输Secure
HttpOnly禁止JavaScript访问HttpOnly
SameSite控制跨站请求发送SameSite=Strict

4. Cookie的完整交互流程

第一次访问

客户端请求:
GET /login HTTP/1.1
Host: www.example.com服务器响应:
HTTP/1.1 200 OK
Set-Cookie: sessionid=xyz789; Path=/; HttpOnly
Content-Type: text/html<html>登录页面...</html>

后续访问

客户端请求:
GET /dashboard HTTP/1.1
Host: www.example.com
Cookie: sessionid=xyz789服务器响应:
HTTP/1.1 200 OK
Content-Type: text/html<html>欢迎回来,用户123!</html>

5. Cookie的分类

按生命周期

  • 会话Cookie:浏览器关闭时删除(无Expires/Max-Age)

  • 持久Cookie:在指定时间后过期

按安全性

  • 普通Cookie:可通过HTTP和HTTPS传输

  • 安全Cookie:仅通过HTTPS传输(Secure属性)

6. SameSite属性详解

Set-Cookie: sessionid=abc123; SameSite=Strict    # 严格模式:完全禁止跨站
Set-Cookie: sessionid=abc123; SameSite=Lax       # 宽松模式:允许部分跨站(默认)
Set-Cookie: sessionid=abc123; SameSite=None      # 无限制:允许所有跨站(需Secure)

作用:防止CSRF(跨站请求伪造)攻击


五、实战:完整的HTTP交互示例

用户登录流程

# 1. 请求登录页面
GET /login HTTP/1.1
Host: www.example.com# 2. 返回登录表单
HTTP/1.1 200 OK
Content-Type: text/html<form action="/login" method="post"><input name="username"><input name="password">
</form># 3. 提交登录信息
POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32username=john&password=123456# 4. 登录成功,设置Cookie
HTTP/1.1 200 OK
Set-Cookie: sessionid=user123; Path=/; HttpOnly; Max-Age=3600
Content-Type: text/html<html>登录成功!</html># 5. 访问个人页面(携带Cookie)
GET /profile HTTP/1.1
Host: www.example.com
Cookie: sessionid=user123# 6. 返回个性化内容
HTTP/1.1 200 OK
Content-Type: text/html<html>欢迎,john!这是你的个人页面。</html>

六、安全考虑与最佳实践

Cookie安全:

  1. 敏感信息不存Cookie:使用Session服务器端存储

  2. 设置HttpOnly:防止XSS攻击窃取Cookie

  3. 设置Secure:敏感Cookie仅通过HTTPS传输

  4. 合理设置SameSite:防止CSRF攻击

  5. 控制Domain和Path:避免不必要的Cookie发送

性能优化:

  1. 减少Cookie大小:每个请求都会自动携带Cookie

  2. 使用CDN:静态资源使用无Cookie域名

  3. 合理设置过期时间:避免长期存储不必要数据

总结

HTTP报文格式和Cookie机制是Web开发的基石。理解:

  • 请求报文如何构造,方法的选择依据

  • 响应报文的状态码含义,首部字段作用

  • Cookie如何维护用户状态,各种属性的安全影响

这些知识对于开发安全的、高性能的Web应用至关重要。Cookie虽然解决了HTTP无状态的问题,但也带来了安全和性能的挑战,需要在设计时仔细权衡。

http://www.dtcms.com/a/537983.html

相关文章:

  • CUDA-GDB(8)——检查程序状态
  • 青海网站建设公明网站建设怎么做
  • 学院网站建设策划书村镇建设年度报表登录网站
  • 西安网站seo技术外贸企业网站模板建设可以吗
  • Rust:函数栈帧 Box智能指针
  • 如何实现大模型 “边生成边显示“
  • 网站排版教程程序员 做网站 微信公众号 赚钱
  • 无人机数据 → 三维模型与光谱指数 → 多源融合特征 → 机器学习模型与机理解释 → 生态应用案例与科研论文
  • 做性的网站有哪些内容科技股有哪些股票龙头2021
  • 深圳网站建设找智恒网络网站做竞价优化
  • 计算机视觉:基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测识别系统(Python+PySide6界面+训练代码)(源码+文档)✅
  • 重庆网站设计公司推荐永久免费虚拟主机
  • 软件自学网站房地产设计公司
  • 网络科普:自治系统编号
  • 网站不显示index.html北京最大的广告制作公司
  • TCP 消息分段与粘包问题的完整解决方案
  • 网站怎么运营推广电话销售管理系统
  • 邢台公司网站建设南漳网站制作
  • 度假村网站模板关键词研究工具
  • 【算法】day13 链表
  • 可以做网站的语言济南泰安网站建设公司
  • 超级工程网站建设上海中心大厦wordpress 登陆后台
  • 淮安网站定制wordpress多用户图库
  • 顺企网萍乡网站建设网站排名优化怎么弄
  • switch宝可梦传说Z-A金手指1.0.1免通信进化和持物通信进化修改
  • 校园电子商务网站建设网站制作教程网站
  • 长沙第三方网站建设公司辽宁工程建设信息网诚信库怎么填
  • 建网站需要什么软件义乌跨境电商公司前十名
  • 网站建设费 科目百度推广怎么注册账号
  • FP8013降压恒流单芯片切五路调光调色方案