【计算机网络】深入解析 HTTP 协议的概念、工作原理和通过 Fiddler 抓包查看 HTTP 请求/响应的协议格式



网络原理— HTTP
1. 什么是HTTP?
HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议:
HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现)
我们平时打开一个网站,就是通过HTTP协议来传输数据的:

当我们在浏览器中输入一个搜狗搜索的"网址"(URL)时:

- 浏览器就给搜狗的服务器
发送了一个HTTP请求;- 搜狗的服务器
返回了一个HTTP响应;
这个响应结果被浏览器解析之后,就展示成我们看到的页面内容.
- 这个过程中浏览器可能会给服务器发送多个HTTP请求,服务器会对应返回多个响应;
- 这些
响应里就包含了页面HTML,CSS,JavaScript,图片,字体等信息;
所谓"超文本"的含义,就是传输的内容不仅仅是文本(比如html,css这个就是文本),还可以是一些其他的资源,比如图片,视频,音频等二进制的数据.
2. 理解"应用层协议"
我们已经学过TCP/IP,已经知道目前数据能从客户端进程,经过路径,选择 跨网络 传送到 服务器端进程 [IP+Port];
可是,仅仅把数据从A点传送到B点就完了吗?
这就好比,在淘宝上买了一部手机:
卖家[客户端]把手机通过顺丰[传送+路径选择]送到买家[服务器]手里就完了吗?当然不是,买家还要使用这款产品;
在买家使用之后,给卖家打分评论。
所以,我们把数据从 A端 传送到 B端 ,TCP/IP 解决的是顺丰的功能,两端还要对数据进行加工处理或者使用;
因此,我们还需要一层协议,不关心通信细节,关心应用细节!这层协议叫做应用层协议。
一般情况下,应用是有不同的场景的,所以应用层协议是有不同种类的,其中经典协议之一的 HTTP 就是其中的佼佼者。
再回到我们刚刚说的买手机的例子:
顺丰相当于
[TCP/IP]的功能,那么买回来的手机都附带了
说明书【产品介绍,使用介绍,注意事项等】;该说明书指导用户该如何使用手机,此时的
说明书可以理解为用户层协议
3. 理解HTTP协议的工作过程
当我们在浏览器中输入一个"网址,此时浏览器就会给对应的服务器发送一个HTTP请求.
对方服务器收到这个请求之后,经过计算处理,就会返回一个HTTP响应.

事实上,当我们访问一个网站的时候,可能涉及不止一次的 HTTP请求/响应 的交互过程;
可以通过 chrome 的开发者工具观察到这个详细的过程:
通过
F12打开 chrome 的开发者工具,切换到Network标签页;然后刷新页面即可看到如下图效果,每一条记录都是一次HTTP请求/响应:
注意:
- 当前搜狗
主页是通过https来进行通信的,- https 是在 http 基础之上做了一个
加密解密的工作,后面再介绍.
4. 通过抓包工具 fiddler 查看 HTTP协议格式
HTTP 是一个文本格式的协议;
可以通过Chrome开发者工具或者Fiddler抓包,分析HTTP请求/响应的细节;
4.1 抓包工具的使用
以Fiddler为例:Fiddler下载地址;
可以使用搜狗浏览器下载,避免下载时发生其他应用捆绑下载;
安装过程比较简单,一路next即可
接下来,设置 fiddler ,让它支持 HTTPS:
值得一提,在首次安装 fiddler 并且勾选上面的选项时,会弹出是否信任 fiddler 的根安全证书,一定要点 yes ,否则只能卸载并且重新安装;
显示请求的原始数据:

如果要放大请求中的字体,可以用记事本打开:

上面是查看请求的原始数据,下面就是查看响应的原始数据:

在响应的详细信息(右下角)的框中出现乱码,是因为这些信息是经过压缩后的数据;
如果要看完整的详细信息,就点击Response body is encoded. Click to decode这个黄色按钮:

点开后,响应信息解压缩,可以通过文本打开进一步查看信息;

4.2 抓包工具的原理
Fiddler相当于一个"代理":
浏览器访问 sogou.com 时,就会把HTTP请求先发给Fiddler;Fiddler再把请求转发给 sogou 的服务器;- 当 sogou
服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器;

因此 Fiddler 对于浏览器和sogou服务器之间交互的数据细节,都是非常清楚的.
4.3 抓包结果
以下是一个HTTP请求/响应的抓包结果
| HTTP请求 |

首行:
[方法]+[url]+[版本]
Header (请求头):
- 请求的属性,
冒号分割的键值对; - 每组属性之间使用
\n分隔; - 遇到
空行表示 Header 部分结束
Body:
空行后面的内容都是Body;- Body允许为
空字符串. - 如果Body存在,则在Header中会有一个
Content-Length属性来标识 Body 的长度;
| HTTP响应 |

首行:
[版本号]+[状态码]+[状态码解释]
Header (响应头):
- 请求的属性,
冒号分割的键值对; - 每组属性之间使用
\n分隔; - 遇到
空行表示 Header 部分结束
Body:
空行后面的内容都是Body;- Body允许为
空字符串. - 如果Body存在,则在Header中会有一个
Content-Length属性来标识 Body 的长度; - 如果服务器返回了一个 html页面,那么
html页面内容就是在body中.
4.4 协议格式总结

思考问题:为什么HTTP报文中要存在 "空行" ?
因为HTTP协议并没有规定
报头部分的键值对有多少个;
空行就相当于是"报头的结束标记",或者是"报头和正文之间的分隔符";HTTP在传输层依赖TCP协议,
TCP是面向字节流的;如果
没有这个空行,就会出现"粘包问题".


相关文章:
【计算机网络】深入解析 HTTP 协议的概念、工作原理和通过 Fiddler 抓包查看 HTTP 请求/响应的协议格式
网络原理— HTTP 1. 什么是HTTP? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议: HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现) 我们平时打开一个网站,就是通过HTTP协议来…...
Springboot redis bitMap实现用户签到以及统计,保姆级教程
项目架构,这是作为demo展示使用: Redis config: package com.zy.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.Ob…...
【C++】:STL详解 —— 红黑树封装map和set
目录 红黑树的源代码 正向迭代器的代码 反向迭代器的代码 set的模拟实现 map的模拟实现 红黑树的源代码 #pragma once #include <iostream>using namespace std; // set ->key // map ->key/value// set ->key // map ->key/valueenum Colour {RED,BLAC…...
FPGA设计时序约束用法大全保姆级说明
目录 一、序言 二、时序约束概览 2.1 约束五大类 2.2 约束功能简述 2.3 跨时钟域约束 三、时序约束规范 3.1 时序约束顺序 3.2 约束的优先级 四、约束示例 4.1 设计代码 4.2 时序结果 4.2.1 create_clock 4.2.2 create_generated_clock 4.2.3 Rename_Auto-Derive…...
【前缀和与差分 C/C++】洛谷 P8218 求区间和
2025 - 03 - 09 - 第 72 篇 Author: 郑龙浩 / 仟濹 【前缀和与差分 C/C】 文章目录 洛谷 P8218 求区间和题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示思路代码 洛谷 P8218 求区间和 题目描述 给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_…...
C++修炼之路:初识C++
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞,关注! 引言 …...
Pytorch 第九回:卷积神经网络——ResNet模型
Pytorch 第九回:卷积神经网络——ResNet模型 本次开启深度学习第九回,基于Pytorch的ResNet卷积神经网络模型。这是分享的第四个卷积神经网络模型。该模型是基于解决因网络加深而出现的梯度消失和网络退化而进行设计的。接下来给大家分享具体思路。 本次…...
2025-3-9 一周总结
目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...
如何在el-input搜索框组件的最后面,添加图标按钮?
1、问题描述 2、解决步骤 在el-input组件标签内,添加一个element-plus的自定义插槽, 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话,请关注本博主~~...
[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信
基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯(飞控部分)六.移植2.4g通讯(遥控部分) 一.Si24Ri原理图 Si24R1芯片原理图如下: 右侧为晶振。 模块…...
Python爬取咸鱼Goodfish店铺所有商品接口的详细指南
在电商数据分析和市场研究中,爬取咸鱼店铺内的所有商品信息是一项极具价值的任务。通过调用咸鱼的goodfish.item_search_shop接口,可以获取指定店铺内的商品列表,包括商品标题、价格、图片链接、销量等详细信息。本文将详细介绍如何使用Pytho…...
【极光 Orbit•STC8A-8H】03. 小刀初试:点亮你的LED灯
【极光 Orbit•STC8H】03. 小刀初试:点亮你的 LED 灯 七律 点灯初探 单片方寸藏乾坤,LED明灭见真章。 端口配置定方向,寄存器值细推敲。 高低电平随心控,循环闪烁展锋芒。 嵌入式门初开启,从此代码手中扬。 摘要 …...
docker本地部署RagFlow
1.安装 克隆仓库 git clone https://github.com/infiniflow/ragflow.git构建预建的Docker映像并启动服务器 cd ragflow/docker chmod x ./entrypoint.sh docker compose -f docker-compose.yml -p ragflow up -d修改ragflow/docker/.env文件 #RAGFLOW_IMAGEinfiniflow/ragfl…...
STM32F4 UDP组播通信:填一填ST官方HAL库的坑
先说写作本文的原因,由于开项目开发中需要用到UDP组播接收的功能,但是ST官方没有提供合适的参考,使用STM32CubeMX生成的代码也是不能直接使用的,而我在网上找了一大圈,也没有一个能够直接解决的方案,deepse…...
基于python大数据的招聘数据可视化与推荐系统
博主介绍:资深开发工程师,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有…...
10. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--认证
在微服务架构中,通过在网关层实现身份认证、权限校验和数据加密,可以有效防范恶意攻击和非法访问,保障内部服务安全。采用JWT、OAuth等主流认证机制,使每次请求均经过严格验证,降低安全漏洞风险。同时,统一…...
DeepSeek 3FS:端到端无缓存的存储新范式
在 2025 年 2 月 28 日,DeepSeek 正式开源了其高性能分布式文件系统 3FS【1】,作为其开源周的压轴项目,3FS 一经发布便引发了技术圈的热烈讨论。它不仅继承了分布式存储的经典设计,还通过极简却高效的架构,展现了存储技…...
vue3组合式API怎么获取全局变量globalProperties
设置全局变量 main.ts app.config.globalProperties.$category { index: 0 } 获取全局变量 const { appContext } getCurrentInstance() as ComponentInternalInstance console.log(appContext.config.globalProperties.$category) 或是 const { proxy } getCurrentInstance…...
【YOLOv12改进trick】多尺度大核注意力机制MLKA模块引入YOLOv12,实现多尺度目标检测涨点,含创新点Python代码,方便发论文
🍋改进模块🍋:多尺度大核注意力机制(MLKA) 🍋解决问题🍋:MLKA模块结合多尺度、门控机制和空间注意力,显著增强卷积网络的模型表示能力。 🍋改进优势🍋:超分辨的MLKA模块对小目标和模糊目标涨点很明显 🍋适用场景🍋:小目标检测、模糊目标检测等 🍋思路…...
网络安全之端口扫描(一)
前置介绍 什么是DVWA? DVWA(Damn Vulnerable Web Application)是一个专门设计用于测试和提高Web应用程序安全技能的开源PHP/MySQL Web应用程序。它是一个具有多个安全漏洞的故意不安全的应用程序,供安全专业人员、渗透测试人员、…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...



