侧边栏壁纸
  • 累计撰写 29 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

计算机网络——应用层HTTP协议分析

Administrator
2026-02-01 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

计算机网络——应用层 HTTP 协议分析

基础概念

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于传输超文本数据(如 HTML、图像、视频)的应用层协议,基于 TCP,默认端口为 80(HTTPS 为 443)。其核心特点包括:

  • 无状态:每次请求和响应独立,服务器不自动保存客户端状态(通过 Cookie 或 Session 弥补)。

  • 请求-响应模型:规定了客户端(浏览器)与服务器间的传输规范,客户端(通常是浏览器)发送请求,服务器返回响应。

  • 灵活性:支持多种数据类型(文本、图像、音视频等)。

HTTP 版本号

  • 常见的 HTTP 版本号为:1.0、1.1(常用)、2.0(常用,兼容 1.1)、3.0(基于 UDP)。

  • HTTP/1.0:是首个标准化版本,采用短连接模式,每次请求和响应,都要开始前三次握手,结束后四次挥手,效率低下且无状态管理。

  • HTTP/1.1:通过引入长连接(Connect:Keep-Alive)实现 TCP 连接复用,并支持交替传输。

  • HTTP/2.0:强制使用 HTTPS 加密,并兼容 HTTP/1.1,不再传输字符串,都是字节码(节省内存、流量、提高性能),支持交错运行,报文分段,同时支持服务器主动向客户端推送。

  • HTTP/3.0:基于 UDP,有 QUIC,尚未普及,仍处于理论中。

对比项

HTTP/1.0

HTTP/1.1

HTTP/2.0

HTTP/3.0

速度

慢(串行请求)

中等(持久连接)

快(交错运行 报文分段)

最快(QUIC+0-RTT)

传输协议

TCP

TCP

TCP

QUIC(UDP)

连接

每次新建 TCP

持久连接(复用 TCP)

多路复用(单连接并行)

多路复用 + 连接迁移

传输格式

字符串

字符串

字节码

字节码

加密需求

可选

可选

强制 HTTPS

强制(内置 TLS 1.3)

队头阻塞

存在(TCP 层)

存在(TCP 层)

部分解决(应用层)

完全解决(QUIC 流)

普及度

淘汰

主流(兼容性强)

手机 APP 等大量

理论

应用层

URL 结构

URL(Uniform Resource Locator,统一资源定位符)用于定位互联网上的资源,比如网页、图片、视频等,格式如下:

<协议>://<主机名>:<端口>/<路径>?<查询参数>#<片段标识符>
  1. 协议(Scheme)

    • 定义访问资源使用的协议(如 httphttpsftp)。

    • 示例:https://

  2. 主机名(Host)

    • 可以是域名或 IP 地址。

    • 示例:blog.xiaqy.top

  3. 端口(Port,可选)

    • 指定服务运行的端口号,默认端口可省略(如 HTTP 默认 80,HTTPS 默认 443)。

    • 示例::8080

  4. 路径(Path)

    • 资源在服务器上的具体位置,通常类似文件路径。

    • 示例:/articles/url-format

  5. 查询参数(Query,可选)

    • ? 开头,多个参数用 & 分隔,形式为 key=value

    • 示例:?page=1&sort=date

  6. 片段标识符(Fragment,可选)

    • # 开头,指向资源内的某个部分(如 HTML 锚点)。

    • 示例:#section2

HTTP 请求报文

请求行

  • 请求行的格式:方法 请求URL和参数 HTTP版本,如 POST /login.php HTTP/1.1

  • 常见的请求方式是 GET 和 POST。

方法

说明

支持的 HTTP 协议版本

GET

获取指定资源,参数在 URL 中传递

1.0、1.1

POST

提交实体到指定资源,通常用于创建/更新资源

1.0、1.1

PUT

替换目标资源的所有当前表示(完整更新)

1.0、1.1

HEAD

获取与 GET 相同的响应头,但不返回响应体(用于检查资源有效性)

1.0、1.1

DELETE

删除指定资源

1.0、1.1

OPTIONS

获取目标资源支持的通信选项(CORS 预检请求)

1.1

TRACE

沿着目标资源的路径回显请求消息(用于诊断)

1.1

CONNECT

建立与服务器的隧道连接(用于 SSL 代理)

1.1

PATCH

对资源进行部分修改(RFC 5789 新增方法)

1.1

LINK

建立资源间关系(已废弃,RFC 2068)

1.0

UNLINK

移除资源间关系(已废弃,RFC 2068)

1.0

请求行方法 GET 与 POST 的区别

对比维度

GET 方法

POST 方法

主要用途

获取服务器资源(只读操作)

提交数据到服务器(写操作)

内容

只能传输字符串参数

可以传输任意类型的参数(字符串、图片、视频 等)

数据长度

有长度限制(如 chrome 是 4096 字节)

理论上无限制(服务器可配置最大限制)

参数位置

URL 查询字符串中

请求体中

安全性

参数明文暴露在 URL 和浏览器历史中

数据在请求体中,HTTPS 下更安全

可见性

参数在地址栏可见

一般参数不可见(需开发者工具查看)

幂等性

多次请求结果相同

多次提交可能产生副作用(如重复下单)

缓存

可被浏览器/代理服务器缓存

默认不缓存(除非显式设置 Cache-Control 头)

书签

可直接保存或分享带参数的 URL

无法直接保存含请求体的操作

请求头

  • 客户端(如浏览器、API 调用)向服务器发送请求时,请求头用于传递附加信息,帮助服务器正确处理请求。

请求头

描述

Host

访问的域名或 IP

Connection

表明 TCP 是否结束,如 keep-alive(复用 TCP)或 close

User-Agent(UA)

客户端的浏览器版本和操作系统版本

Accept

表明浏览器能够接受什么类型的信息,如 text/html, application/json

Accept-Encoding

表明浏览器能够接受什么类型的压缩信息,如 gzip, deflate

Accept-Language

可接受的语言,如 zh-CN, en-US

Content-Type

表明请求体的 MIME 类型,如 application/x-www-form-urlencoded

Content-Length

告知服务器请求体的字节长度,仅 POST 请求使用

Referer

告诉服务器请求来源页面的 URL

Cookie

客户端存储的凭据信息

Host

  • 描述:指定访问的服务器域名或 IP 地址。

  • 示例:Host: blog.xiaqy.top

应用层

Connection

  • 描述:指示 TCP 连接在请求后是否保持或关闭。

  • 详情:

    • 从 HTTP/1.1 开始,多个请求和响应可复用同一 TCP 连接。

    • keep-alive:启用 TCP 长连接,允许后续 HTTP 请求复用同一连接。

    • close:响应后或长时间空闲后,TCP 连接将关闭。

  • 示例:Connection: keep-alive

应用层

User-Agent

  • 描述:标识发出请求的客户端(浏览器、设备或应用)版本。

  • 用途:帮助服务器根据客户端特性定制响应。

  • 示例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0

应用层

Accept

  • 描述:指定客户端可接受的响应 MIME 类型。

  • 详情:

    • HTTP 使用 MIME 类型(而非文件扩展名)标识内容类型。

    • 常见 MIME 类型:

      • text/html:HTML 文档

      • application/json:JSON 数据

      • image/png:PNG 图片

      • application/pdf:PDF 文件

    • 参考:MIME 类型列表

Accept-Encoding

  • 描述:列出客户端支持的压缩方式(如 gzip、deflate)。

  • 详情:

    • 从 HTTP/1.0 开始,请求和响应流量可通过 gzip 等压缩方式传输,浏览器和服务器自动解压。

  • 示例:Accept-Encoding: gzip, deflate

Accept-Language

  • 描述:指定客户端支持的语言。

  • 用途:服务器可根据语言偏好返回合适的响应内容。

  • 示例:Accept-Language: zh-CN, zh; q=0.9, en; q=0.8

Content-Type

  • 描述:指明 POST 请求体的 MIME 类型。

  • 详情:

    • 通常仅对 POST 请求有意义。

    • 重要 MIME 类型:

      • application/x-www-form-urlencoded:表单数据编码

      • multipart/form-data:文件上传

      • application/json:JSON 数据

  • 示例:Content-Type: application/x-www-form-urlencoded

image-20250619221306575

Content-Length

  • 描述:表明请求体的字节大小。

  • 详情:通常仅对 POST 请求有意义。

  • 示例:Content-Length: 88

image-20250619221137507

Referer

  • 描述:告知服务器请求来源的页面 URL。

  • 用途:用于分析用户来源或防止未经授权的请求。

  • 示例:Referer: https://www.baidu.com/index.htm

应用层
  • 描述:保存至浏览器的凭据信息,用于状态管理。

  • 详情:

    • Cookie:客户端存储的键值对,服务器通过 Set-Cookie 头设置。

    • Session(较为安全的 Cookie):基于服务器端的会话管理,通过 Set-Cookie 传递 Session ID。

应用层

特性

Cookie

Session

存储位置

存储在客户端(浏览器)

存储在服务器端

生命周期

可设置过期时间,持久化或会话结束删除

通常在会话结束(如浏览器关闭)时销毁

传输方式

通过 HTTP 请求头(Cookie)自动发送

通过 Cookie 传递 Session ID

数据内容

键值对,通常包含简单数据(如用户偏好)

会话数据,通常通过 Session ID 关联

安全性

较低,易被篡改或窃取

较高,数据存储在服务器端,仅传输 ID

大小限制

通常限制为 4KB

无严格大小限制,取决于服务器配置

性能影响

每次请求都发送,增加少量开销

服务器需维护会话状态,占用资源较多

典型用途

保存用户偏好、跟踪用户行为

用户认证、临时状态管理

请求空行

  • 在 HTTP 协议中,请求空行是 HTTP 请求报文中的一个关键部分,用于 分隔请求头和请求体。它的作用类似于一个结束标记,告诉服务器头部的结束位置。

请求体

  • 请求体用于向服务器发送数据(如表单提交、JSON、文件上传等)

  • GET 请求方式中请求体为空

  • POST 请求方式请求体是可选项

HTTP 响应报文

响应行

  • 响应行的格式:HTTP版本 状态码 原因短语,如 HTTP/1.1 302 Found

  • 状态码:是一个三位数字代码,用于表示服务器对请求的处理结果。

  • 响应状态:响应中服务器返回的状态码和对应的状态消息,如 Found

状态码

描述

常见状态码

1xx

提示信息,表示目前是中间状态,要继续操作,如 100 Continue

100

2xx

成功,报文已经收到并被正确处理,如 200 OK

200

3xx

重定向,资源位置发生变动,需要客户端重新发送请求,如 302 Found

302、304

4xx

客户端错误,请求报文有误,服务器无法处理,如 404 Not Found

403、404、405

5xx

服务器在处理请求时内部发生了错误,如 500 Internal Error

500、502、503、504

具体状态码示例

  • 100 continue

  • 200 响应成功

  • 302 重定向/跳转

  • 304 缓存资源没有修改

  • 403 拒绝访问

  • 404 访问资源不存在

  • 405 请求方式不允许

  • 500 服务器无法处理

  • 502/503/504 服务器无响应

响应头

  • 服务器返回响应时,响应头包含元数据,指导客户端如何处理响应(如缓存、编码、安全策略等)。

  • 响应头大都与请求头相似。

#日期
Date: Thu,19Jun 2025 05:57:33 GMT
#中间件版本
Server: Apache/2.4.10 (Debian)
#压缩类型
Content-Encoding: gzip
#响应体的长度
Content-Length:2690
#响应体的类型
Content-Type: text/html;charset=utf-8

响应空行

  • 在 HTTP 协议中,响应空行是 HTTP 请求报文中的一个关键部分,用于 分隔响应头和响应体。它的作用类似于一个结束标记,告诉服务器头部的结束位置。

响应体

  • 是服务器返回给客户端的实际数据内容,通常用于传输网页、JSON、文件、流媒体等。

抓包与调试

Wireshark 抓包

使用 Wireshark 分析 HTTP 流量,设置过滤器 http 可查看请求和响应的详细信息,包括:

  • 请求方法、URL、头等信息。

  • 响应状态码、响应体等内容。

  • TCP 连接的建立和关闭(三次握手、四次挥手)等。

image-20250619204111974
image-20250619204502710

浏览器开发者工具

浏览器开发者工具提供以下功能:

  • 元素:查看渲染后的 DOM 结构和 CSS 样式。

[!Important]

元素的 HTML 标签是浏览器渲染、解析 js 之后的代码。

右键界面查看源代码,查看的是未经解析的响应体原始内容。

  • 控制台:执行 JavaScript 代码的交互式终端,调试错误,如 alert("Hello")

  • 源代码:查看、调试、修改网站前端代码,支持断点调试。

  • 网络:查看网页中的请求和响应。

  • 应用:查看、管理 Cookie 等。

image-20250619211110540

0

评论区