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

news2025/4/21 19:42:51

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


网络原理— 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://www.coloradmin.cn/o/2312991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot优雅关机,监听关机事件,docker配置

Spring Boot 提供了多种方法来实现优雅停机(Graceful Shutdown),这意味着在关闭应用程序之前,它会等待当前正在处理的请求完成,并且不再接受新的请求。 一、优雅停机的基本概念 优雅停机的主要步骤如下: …

在【k8s】中部署Jenkins的实践指南

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Jenkins简介 2、k8s简介 3、什么在…

Unity DOTS从入门到精通之 C# Job System

文章目录 前言安装 DOTS 包C# 任务系统Mono 环境DOTS 环境运行作业NativeContainer 前言 作为 DOTS 教程,我们将创建一个旋转立方体的简单程序,并将传统的 Unity 设计转换为 DOTS 设计。 Unity 2022.3.52f1Entities 1.3.10 安装 DOTS 包 要安装 DOTS…

【Godot4.4】浅尝Godot中的MVC

概述 基于一个Unity的视频。学习了一下基本的MVC概念,并尝试在Godot中实现了一下。 原始的MVC: Godot中的MVC: Model、View和Controller各自应该实现的功能如下: Model: 属性(数据字段)数据存取方法数据更新信号 View: 控…

Elasticsearch为索引设置自动时间戳,ES自动时间戳

文章目录 0、思路1、配置 ingest pipeline2、在索引映射中启用_source字段的时间戳3、使用 index template 全局设置时间戳4、写入测试数据5、验证结果6、总结 在使用 Elasticsearch 进行数据存储和检索时,时间戳字段是一个非常重要的组成部分。它可以帮助我们追踪数…

计算机网络:计算机网络的组成和功能

计算机网络的组成: 计算机网络的工作方式: 计算机网络的逻辑功能; 总结: 计算机网络的功能: 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点(计算机或设备&…

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…

云服务运维智能时代:阿里云操作系统控制台

阿里云操作系统控制台 引言需求介绍操作系统使用实例获得的帮助与提升建议 引言 阿里云操作系统控制台是一款创新型云服务器运维工具,专为简化用户的运维工作而设计。它采用智能化和可视化的方式,让运维变得更加高效、直观。借助AI技术,控制…

硬件学习笔记--48 磁保持继电器相关基础知识介绍

目录 1.磁保持继电器工作原理 2.磁保持继电器内部结构及组成部分 3.磁保持继电器主要参数 4.总结 1.磁保持继电器工作原理 磁保持继电器利用永磁体的磁场和线圈通电产生的磁场相互作用,实现触点的切换。其特点在于线圈断电后,触点状态仍能保持&#…

简记_硬件系统设计之需求分析要点

目录 一、 功能需求 二、 整体性能需求 三、 用户接口需求 四、 功耗需求 五、 成本需求 六、 IP和NEMA防护等级需求 七、 认证需求 功能需求 供电方式及防护 供电方式:市电供电、外置直流稳压电源供电、电池供电、PoE(Power Over Ether…

ubuntu 20.04下ZEDmini安装使用

提前安装好显卡驱动和cuda,如果没有安装可以参考我的这两篇文章进行安装: ubuntu20.04配置YOLOV5(非虚拟机)_ubuntu20.04安装yolov5-CSDN博客 ubuntu20.04安装显卡驱动及问题总结_乌班图里怎么备份显卡驱动-CSDN博客 还需要提前…

tauri-plugin-shell插件将_blank的a标签用浏览器打开了,,,解决办法

不要使用这个插件,这个插件默认会将网页中a标签为_blank的使用默认浏览器打开,但是这种做法在我的程序里不是很友好,我需要自定义这种行为,当我点击我自己的链接的时候,使用默认浏览器打开,当点击别的链接的…

C++ 继承(2)

Hello!!大家早上中午晚上好!!今天收尾继承剩余部分内容!! 一、友元不能继承 基类的友元函数不能被子类继承,也就是基类的友元函数访问不了子类的私有或保护成员! 1.1解决方法在子…

解决:Word 保存文档失败,重启电脑后,Word 在试图打开文件时遇到错误

杀千刀的微软,设计的 Word 是个几把,用 LaTex 写完公式,然后保存,卡的飞起 我看文档卡了很久,就关闭文档,然后 TMD 脑抽了重启电脑 重启之后,文档打不开了,显示 杀千刀的&#xff…

基于Asp.net的零食购物商城网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

ESP8266UDP透传

1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. PC 连⼊入 ESP8266 softAP 就是连接wifi 3.查询ESP8266设备的IP地址 ATCIFSR 响应: CIFSR: APIP, "192.168.4.1" CIFSR: APMAC, "1a: fe: 34: a5:8d: c6" CIFSR: STAIP, "192.…

UE5从入门到精通之如何创建自定义插件

前言 Unreal 的Plugins插件系统中有很多的插件供大家使用,包括官方的和第三方的,这些插件不仅能帮我我们实现特定功能,还能够提升我们的工作效率。 所以我们今天就来自己创建一个自定义插件,如果我们想实现什么特定的功能,我们也可以发布到商店供大家使用了。 创建插件 …

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

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

olmOCR:高效精准的 PDF 文本提取工具

在日常的工作和学习中,是否经常被 PDF 文本提取问题困扰?例如: 想从学术论文 PDF 中提取关键信息,却发现传统 OCR 工具识别不准确或文本格式混乱?需要快速提取商务合同 PDF 中的条款内容,却因工具不给力而…

Spring Boot使用JDBC /JPA访问达梦数据库

Spring Boot 是一个广泛使用的 Java 框架,用于快速构建基于 Spring 的应用程序。对于达梦数据库(DMDB)的支持,Spring Boot 本身并没有直接内置对达梦数据库的集成,但你可以通过一些配置和依赖来支持达梦数据库。 以下…