结合Wireshark抓包分析,沉浸式体验HTTP请求的一次完整交互过程

news2024/12/23 15:42:36

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于传输超文本信息的协议,它是互联网上应用最为广泛的一种网络协议。了解完整的HTTP请求过程有助于我们更深层次的去分析问题(尤其是网络安全问题),同时也更能清楚为什么现在网站很少再用HTTP了,而改为使用更为安全的HTTPS协议。

HTTP交互过程概览图
上图中描述了客户端访问百度网站时,HTTP的完整交互过程,接下来会对本图涉及的内容进行详细展开。

1. HTTP请求过程介绍

HTTP连接本质就是使用TCP协议建立起的可靠连接进行请求发送与请求响应。HTTP请求过程大致可以分为五个步骤(见上图),每个步骤细节如下:

  • 1. DNS解析:当客户端(如浏览器)尝试访问一个网站时,它首先会尝试从本地缓存中查找域名对应的IP地址。如果本地缓存中没有找到,客户端会发送DNS查询请求到本地的DNS服务器。
  • 2. 建立TCP连接:客户端(如浏览器)向服务器发起连接请求,通常使用TCP/IP协议建立一个到服务器的TCP连接。这个过程称为三次握手(Three-way handshake),确保连接的可靠性。
  • 3. 客户端发送请求:客户端向服务器发送HTTP请求消息。
  • 4. 服务端响应请求:服务器接收到请求后,会检查请求头和请求体,然后根据请求方法(如GET、POST)和资源路径来决定如何响应。
  • 5. 释放TCP连接:请求完成后,客户端和服务器可以关闭连接。

2. Wireshark抓包分析

2.1. Wireshark抓包步骤

Wireshark是一款最流行和强大的开源数据包抓包与分析工具,可以截取各种网络数据包,并可以查看网络数据包详细信息。接下来我们就用这款工具来抓取百度网站的HTTP请求数据包。

1)打开Wireshark,开启抓包,然后打开cmd窗口,执行命令curl www.baidu.com访问百度。

2)在cmd中执行命令ping www.baidu.com 获取百度的IP地址。


3)为避免其他无用的数据包影响分析,可在显示过滤器(display filter)输入过滤条件ip.addr== 36.155.132.3,过滤与百度发生交互的数据包。

说明ip.addr== 36.155.132.3 表示只显示TCP协议且源主机IP或者目的主机IP为36.155.132.3的数据包。

2.2. Wireshark数据包分析

接下来主要按四个过程进行介绍,针对过程1(三次握手建立连接)和过程4(四次挥手断开连接),在博主的前期文章中《结合Wireshark抓包实战,图文详解TCP三次握手及四次挥手原理(附下载)》已经详细图解,这次主要针对过程2和过程3进行详解。

  • 过程1:"三次握手"建立TCP连接;
  • 过程2:客户端发送HTTP请求;
  • 过程3:服务器发送HTTP响应;
  • 过程4:"四次挥手"断开TCP连接。

HTTP数据包
1)前三个包完成了"三次握手",建立了TCP连接。

2)第一个HTTP协议包(序号356)执行了HTTP请求。

客户端向服务器发送HTTP请求消息。请求消息通常包括以下部分:

  • 请求行:包含请求方法(如GET、POST)、请求的资源路径、HTTP版本。
  • 请求头:包含客户端信息、请求参数等,例如User-Agent、Accept、Cookie等。
  • 请求体:对于某些请求方法(如POST),可能包含额外的数据,用于向服务器发送信息。

点开请求行,看里面的三个字段,下图所示:

  • Request Method:请求方法,这里的请求方法是GET;
  • Request URI:请求的URI,没指定默认是/,因为我们只请求了域名www.baidu.com,并没指定要获取的资源,所以是默认的/
  • Request Version:请求的版本,因为用的是HTTP协议,所以这里显示HTTP协议的版本。

再看下面的几个请求头:

在这里插入图片描述

  • Host:目标主机;

  • User-Agent:用户代理,也就是浏览器的类型。由于我们没用浏览器,所以这里显示的是命令curl,版本为8.4.0;

  • Accept:浏览器可接受的MIME(Multipurpose Internet Mail Extensions)类型。

    浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。

3)第二个HTTP协议包(序号360)执行了HTTP响应。

服务器接收到请求后,会检查请求头和请求体,然后根据请求方法(如GET、POST)和资源路径来决定如何响应。服务器生成的响应消息,包括状态行、响应体。

  • 状态行:包含版本和响应状态码、状态信息;
  • 响应头:包含响应的服务器的资源信息,一行一个响应头;
  • 响应空行:用来间隔/区分响应头和响应体;
  • 响应体:服务器响应的内容,通常是一个HTML页面的代码或者给客户端的数据,上图中可以看到本次响应的内容是一个文件数据(File Data)。

点开状态行,可以看到里面有三个字段:

  • Response Version:响应版本,因为使用的是HTTP协议,所以这里显示了HTTP的版本;
  • Status Code:响应状态码,这里的 200 表示请求成功;
  • Response Phrase:响应状态码的提示信息。

最后看下几个响应头:

响应头

  • Accept-Ranges: 告知客户端资源是否支持范围请求。当前取值bytes表明资源支持范围请求,可以使用Range头进行请求。

  • Cache-Control: 控制缓存行为,包括是否缓存、缓存的有效期、缓存策略等。

  • Connection: 服务器是否需要保持连接。

    keep-alive表示服务器希望在发送响应后不立即关闭连接,而是保持连接状态以供后续请求复用。这种设置可以提高服务器的响应效率,减少TCP连接的建立和断开的开销,特别是在处理大量并发请求的场景下。

  • Content-Length: 响应内容的字节数,本例是2381字节。

  • Content-Type: 响应内容的类型和编码方式,text/html。

  • Date: 指示响应消息生成的时间。

  • Etag: 资源的实体标签(Entity Tag),用于缓存控制和验证。

  • Last-Modified: 资源的最后修改时间

  • Pragma: 历史遗留的HTTP头,它最初用于缓存控制,但现在已不推荐使用。取值no-cache表明不使用缓存。

  • Server: 服务器的名称或版本。

  • Set-Cookie: 用于设置客户端的Cookie

4)最后四个包,通过"四次挥手"断开了TCP连接。

请求完成后,客户端和服务器可以关闭连接。通常情况下,HTTP 1.0使用的是短连接,请求完成后关闭连接。HTTP 1.1默认使用长连接,多个请求可以复用同一个连接,直到连接超时或被关闭。


当打开响应体,细心的读者会发现它的内容是明文的,对于机密通信来说HTTP通信很容易产生信息泄露。另外,以上介绍的整个交互过程中并不验证通信方的身份,第三方可以冒充他人身份参与通信。博主后续会发图文详解,带你搞清楚HTTPS协议的工作机制。

响应内容明文传输

若想了解更多关于网络协议基础及其工作原理,可以关注下方博主公众号,持续更新。或参阅如下文档

  • 图解HTTP-彩色版-上野宣.pdf (访问密码: 6277)
  • 图解TCP/IP-全彩版(第5版).pdf (访问密码: 6277)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098713.html

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

相关文章

【动态规划】通过例题 理解 完全背包问题(完全背包、零钱兑换、完全平方数、C++)

文章目录 前言问题描述动态规划解法 算法题1.【模板】完全背包2.零钱兑换3.零钱兑换II4.完全平方数 前言 完全背包问题 是一种经典的动态规划问题,通常用于求解优化问题。在这个问题中,我们有一个背包和一组物品,每种物品有一个特定的重量和…

Java注解基础入门

一、基本概念 1.1 认识注解 Java代码中的特殊标记,用于告诉其它程序该段代码该如何执行(Test、Override等) 注解的使用范围包括类、方法、构造器、成员变量等等 注解本质上是接口,继承了Annotation接口 使用(...)注解实际上是一个…

WPF——自定义RadioButton

需求 需要做一组单选按钮,只要单选按钮的显示内容与需要匹配的内容一样,则该单选按钮就为选中状态,否则则为不选中状态;且需要将当前选中状态保存,后续再进入此页面时,匹配内容为此次的保存状态。 如下所…

界面风格选择

风格一 卡通计算机元素加侧边框 风格二 电子科幻元素 风格三 自然景观元素 这个图片有一束从山顶照耀下来的光,很有特色。 登陆注册框样式 上面这个图的光泽感很新颖

大数据新视界--大数据大厂之大数据时代的璀璨导航星:Eureka 原理与实践深度探秘

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

虚幻引擎VR游戏开发 | VR设备和术语

四款Unreal Engine默认配套按键映射的VR设备 IMC按键映射 Oculus Touch (R) Grip Axis: 代表Oculus Rift或Quest设备的右手控制器的抓握轴输入。Valve Index (R) Grip Axis: 代表Valve Index设备的右手控制器的抓握轴输入。Vive (R) Grip: 代表HTC Vive设备的右手控制器的抓握按…

【ESP32】mqtt 发送和接收

一、首先下载MQTT-X软件 二、下载后建立mqtt&#xff0c;设置这些参数 点击连接&#xff0c;然后创建topic主题 三、程序 注释已经写的很清楚了 #include <WiFi.h> // 包含WiFi库&#xff0c;用于连接WiFi网络 #include <PubSubClient.h> // 包含MQTT库&#xf…

【C++八股题整理】内存布局、堆和栈、内存泄露、函数调用栈

C八股题整理 内存布局C中的内存分配情况堆和栈的内存有什么区别&#xff1f; 堆堆内存分配慢如何优化&#xff1f;内存池内存溢出和内存泄漏是什么&#xff1f;如何避免&#xff1f;内存碎片是什么&#xff1f;怎么解决&#xff1f; 栈为什么栈的访问效率比堆高&#xff1f;函数…

奉加微PHY6233进入DTM模式;TX单音信号;

TX单音信号 参考文档"PH62XX射频测试仪器操作说明文档.pdf"进行DTM配置和操作,这里的目的是为了测试频偏: 这里先把原厂给的DTM的ihex固件下载到芯片里面去: 设置好参数后点击start按钮即可打出单音信号: 这时候频谱的信号如下: 接下来调成其他参数可以看到如下频…

一文彻底搞懂Spring, Spring MVC, Spring Boot 和 Spring Cloud 区别

1.定义说明 Spring, Spring MVC, Spring Boot 和 Spring Cloud 是Spring家族中的四个不同的项目&#xff0c;它们有各自的功能&#xff0c;并且可以在Spring应用程序中一起使用。 1&#xff09;Spring Spring是一个开源容器框架&#xff0c;它集成各类型的工具&#xff0c;通…

Android ROM和Linux内核源码在线阅读网站

1&#xff0c; Android在线代码阅读 http://www.aospxref.com/ 支持最新android源码 http://androidxref.com/ 支持到Android9 2&#xff0c; Linux内核在线阅读网站 https://lxr.missinglinkelectronics.com/ 支持在线阅读linux内核&#xff0c;uboot&#xff0c;qemu &am…

JavaScript方法链

前言 在JavaScript中&#xff0c;方法链&#xff08;Chaining Methods&#xff09;是一种编程技术&#xff0c;允许你在一个表达式中连续调用多个方法。这通常通过让每个方法返回对象自身&#xff08;this&#xff09;来实现&#xff0c;从而可以在同一行上依次调用多个方法。…

文件加密软件怎么选呢?五款人气超高的文件加密软件推荐给你

文件加密软件怎么选呢&#xff1f;以下是五款人气超高的文件加密软件&#xff0c;包括安企神在内&#xff0c;它们各自具有独特的功能和优势&#xff1a; 安企神 功能特点&#xff1a;安企神是一款功能强大的企业级文件加密软件&#xff0c;提供全方位的数据安全保护。它采用先…

TPAMI 2024|如何在动态世界中捕捉每一个细节?智能视觉识别的突破,开放长尾识别技术详解!

题目&#xff1a;Open Long-Tailed Recognition in a Dynamic World 动态世界中的开放长尾识别 作者&#xff1a;Ziwei Liu; Zhongqi Miao; Xiaohang Zhan; Jiayun Wang; Boqing Gong; Stella X. Yu 源码链接&#xff1a; https://liuziwei7.github.io/projects/LongTail.ht…

Java项目: 基于SpringBoot+mysql网上订餐系统分前后台(含源码+数据库+开题报告+PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql网上订餐系统分前后台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

Ollydbg提示:xxxxxx可能不是一个 32 位 PE 文件,无论如何都尝试载入吗?

原标题&#xff1a;OD提示C:\Users\XuanRan\Desktop\xxxx.exe’可能不是一个个 32 位 PE 文件,无论如何都尝试载入吗? 它的意思就是告诉你&#xff0c;OD现在只能用于32位软件。 如果要调试64位程序&#xff0c;去使用x64dbg x64dbg下载链接&#xff1a; https://github.com…

代码随想录算法训练营第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 509. 斐波那契数1、题目描述2、思路3、code4、复杂度分析 70. 爬楼梯1、题目描述2、思路3、code 746. 使用最小花费爬楼梯1、题目描述2、思路3、code4、复杂度分析 509. 斐波那契数 题目链接&#xff1a;link 1、题目描述 斐波那契数 &#xff08;通常用 F(n) 表示&…

503错误

503 Service Temporarily Unavailable 我在学习ES-IK分词器时restart es后发现刷新网页报了503错误 后面发现是由于浏览器缓存或存储的Cookies引起的&#xff0c;需要清除缓存和Cookies 然后在游览器设置中找到 ​​ 然后刷新发现可以了

从初阶到顶尖:腾讯产品经理五级能力模型深度解读

产品经理在互联网企业中扮演着至关重要的角色&#xff0c;他们负责从需求分析到产品落地的整个生命周期。在腾讯的产品经理能力模型中&#xff0c;能力被分为五个等级&#xff08;Level 1 到 Level 5&#xff09;&#xff0c;每个等级代表了产品经理在通用能力、专业知识、专业…

【Python报错已解决】“ModuleNotFoundError: No module named ‘mne‘”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述1.1 报错示例&#xff1a;当我们尝试导入MNE-Python库时&#xff0c;可能会看到以下错误…