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

【计算机网络】深入解析 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大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 引言 …...

Pytorch 第九回:卷积神经网络——ResNet模型

Pytorch 第九回&#xff1a;卷积神经网络——ResNet模型 本次开启深度学习第九回&#xff0c;基于Pytorch的ResNet卷积神经网络模型。这是分享的第四个卷积神经网络模型。该模型是基于解决因网络加深而出现的梯度消失和网络退化而进行设计的。接下来给大家分享具体思路。 本次…...

2025-3-9 一周总结

目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...

如何在el-input搜索框组件的最后面,添加图标按钮?

1、问题描述 2、解决步骤 在el-input组件标签内&#xff0c;添加一个element-plus的自定义插槽&#xff0c; 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话&#xff0c;请关注本博主~~...

[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信

基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯&#xff08;飞控部分&#xff09;六.移植2.4g通讯&#xff08;遥控部分&#xff09; 一.Si24Ri原理图 Si24R1芯片原理图如下&#xff1a; 右侧为晶振。 模块…...

Python爬取咸鱼Goodfish店铺所有商品接口的详细指南

在电商数据分析和市场研究中&#xff0c;爬取咸鱼店铺内的所有商品信息是一项极具价值的任务。通过调用咸鱼的goodfish.item_search_shop接口&#xff0c;可以获取指定店铺内的商品列表&#xff0c;包括商品标题、价格、图片链接、销量等详细信息。本文将详细介绍如何使用Pytho…...

【极光 Orbit•STC8A-8H】03. 小刀初试:点亮你的LED灯

【极光 Orbit•STC8H】03. 小刀初试&#xff1a;点亮你的 LED 灯 七律 点灯初探 单片方寸藏乾坤&#xff0c;LED明灭见真章。 端口配置定方向&#xff0c;寄存器值细推敲。 高低电平随心控&#xff0c;循环闪烁展锋芒。 嵌入式门初开启&#xff0c;从此代码手中扬。 摘要 …...

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库的坑

先说写作本文的原因&#xff0c;由于开项目开发中需要用到UDP组播接收的功能&#xff0c;但是ST官方没有提供合适的参考&#xff0c;使用STM32CubeMX生成的代码也是不能直接使用的&#xff0c;而我在网上找了一大圈&#xff0c;也没有一个能够直接解决的方案&#xff0c;deepse…...

基于python大数据的招聘数据可视化与推荐系统

博主介绍&#xff1a;资深开发工程师&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有…...

10. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--认证

在微服务架构中&#xff0c;通过在网关层实现身份认证、权限校验和数据加密&#xff0c;可以有效防范恶意攻击和非法访问&#xff0c;保障内部服务安全。采用JWT、OAuth等主流认证机制&#xff0c;使每次请求均经过严格验证&#xff0c;降低安全漏洞风险。同时&#xff0c;统一…...

DeepSeek 3FS:端到端无缓存的存储新范式

在 2025 年 2 月 28 日&#xff0c;DeepSeek 正式开源了其高性能分布式文件系统 3FS【1】&#xff0c;作为其开源周的压轴项目&#xff0c;3FS 一经发布便引发了技术圈的热烈讨论。它不仅继承了分布式存储的经典设计&#xff0c;还通过极简却高效的架构&#xff0c;展现了存储技…...

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&#xff1f; DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个专门设计用于测试和提高Web应用程序安全技能的开源PHP/MySQL Web应用程序。它是一个具有多个安全漏洞的故意不安全的应用程序&#xff0c;供安全专业人员、渗透测试人员、…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...