HTTP协议抓包分析

article/2025/10/7 6:13:23

文章目录

    • HTTP请求报文和响应报文的结构示意图
    • 请求报文分析
    • 响应报文分析
    • 参考资料

        本次使用的测试的网站是:http://www.people.com.cn
        15 Agu 2019记下:最好是就使用http的网站来分析。因为现在很多网站都是支持的https协议。但是因为我现在也是一个小白,所以,具体他们之间的区别还不是特别清楚。所以,对于这一点以后再深究。

HTTP请求报文和响应报文的结构示意图

为了方便分析我先将HTTP的请求报文和响应报文格式贴出来:图片来源于网络
在这里插入图片描述

在这里插入图片描述

请求报文分析

        首先分析从我电脑上发出的一个请求,也就是这个请求:
在这里插入图片描述
我双击之后打开就是这样子:因为这里主要就是分析HTTP协议的东西,所以仅仅只截下了HTTP请求报文的内容。
在这里插入图片描述
       请求行分析:

  • method:GET;
  • URL:是一个相对的URL。是相对下面的Host来说的。两者组合就是一个完整的URL;这里联合http组合之后就是:http://www.people.com.cn/
  • 版本:HTTP/1.1;
  • CRLF:\r\n

       首部分析:在首部中,每一个字段名最后面都是会有一个cr和lf的。所以,我就在下面的内容中就不提及这个了。

  • Host: www.people.com.cn
    也就是是你要访问的主机的名字;
  • Connection:keep-alive
    值代表的意思是保持连接。这样子有利于在你访问的网页中有很多图片等其他资源的时候,可以使用同一个TCP连接接收,而不是针对每一个文件都建立一次TCP/IP的连接。这个也就是课本上面说的“持久连接”。
  • Upgrade-Insecure-Request:1。
    这个具体的意思我也不太清楚,要详细了解还是得自己去查;在我后面的参考资料中有提到。
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36\r\n
    指明了发出请求的用户代理的浏览器的一些信息;
  • Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3\r\n
    指明了浏览器接收对象的顺序,优先接收text/html文件,这个也是为什么每次服务器返回第一个文件是html了。
  • Referer: http://www.people.com.cn/
    这个代表服务器该该请求时从这个链接进来的。
  • Accept-Encoding: gzip, deflate
    说明该浏览器支持的编码格式,这里是压缩编码的方式。我猜想应该是服务器将浏览器请求的文件都是以压缩文件发送过来的。
  • Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    指明了该浏览器支持的语言类型,支持zh-CN,zh,en。然后优先发送zh-CN和zh的语言,因为他们的权重是0.9
  • \r\n 代表下面的信息就是请求体的实体部分了。

       实体部分分析:下面是我的实体截图
       
按照理论上上来说,这里应该是一些实体的内容,但是我从抓包看到的数据却不是这个样子。可以看到箭头所指的方向,我个人感觉就是上面请求行和首部行的数据的总和而已.。在我百思不得其解的时候,在《计算机网络:自顶向下方法》中看到了这样的一句话:“使用GET方法是实体体为空,而是用post方式是才有该实体体。”所以我觉得应该是这里的是因为这里请求报文没有必要加上请求实体,所以就没有吧。但是后面响应报文的就是包含了响应实体的,通过抓包工具看到,转送过来的就是html代码。

响应报文分析

        接下来分析的就是这个响应请求了。
在这里插入图片描述
        具体的内容是这样的:
在这里插入图片描述
        响应行分析:HTTP/1.1 200 OK\r\n

  • Response Version: HTTP/1.1
  • Status Code: 200 (这个就是那个OK的的Description)
  • Response Phrase: OK
  • crlf

        首部行分析:

  • Content-Type: text/html\r\n
    就是说服务器给客户端传回来的是html的文件格式。这个也验证了请求报文中的Accept字段的值。因为那个字段表示的是浏览器优先接收的对象。的确是text/html文件排在第一个。
  • Connection: keep-alive\r\n
    同上
  • X-Cache: HIT from PDcache-42 :www.people.com.cn\r\n
    一看到Cache就想到了计组中的高速缓存Cache,和Linux内核中的热冷页。我查了一下,这里和其它Cache是一样的,就是为了增加存取效率出现的。后面的HIT就是表示命中了。具体的话还是得自己查资料看啦。后面的参考文献中也有。
  • Powered-By-ChinaCache: HIT from CHN-LN-u-3OZ\r\n
    这个暂时我还是一个刚刚学计网的孩子,我之后一定弄清楚,这里我就不深究了。不过查了一些文章,应该是想说这是一个CDN技术。
  • ETag: W/“5d53bd8c-256d3”\r\n
    Etag中有种Weak Tag,值为 W/“xxxxx”。他声明Tag是弱匹配的,只能做模糊匹配,在差异达到一定阈值时才起作用。(来自百度百科)
  • Content-Length: 36488\r\n
    这个是返回的实体在压缩之之后的长度为36488Byte,这个长度还是可以深究,看后面参考。
  • X-Cache-Hits: 21\r\n
    略去
  • Date: Wed, 14 Aug 2019 08:19:44 GMT\r\n
    这个就是你请求的东西被服务器创建的时间。时间格式是GMT,和北京时间有点误差。
  • Expires: Wed, 14 Aug 2019 08:20:44 GMT\r\n
    这个就是如果你在这个时间之内去再次访问的话,得到就是缓存中的内容
  • CACHE: TCP_HIT\r\n
    略去
  • Content-Encoding: gzip\r\n
    压缩方式
  • Last-Modified: Wed, 14 Aug 2019 07:51:40 GMT\r\n
    你所请求的东西上次修改的时间
  • age: 53\r\n
    代表该响应在缓存代理中存放了53秒。
  • Vary: Accept-Encoding\r\n
    我的理解就是:因为客户端和服务器之间可能有1个或者多个缓存服务器。那么,有时候会将缓存服务器的内容返回给客户端。现在有这样一个情景,A和B都请求的是文件C,文件C在缓存服务器中。但是两个用户使用的浏览器支持的编码不同,A仅仅支持gzip,而B仅仅支持的是compress,那么你把文件C使用gzip压缩的给B就是不对的,因为B无法解压得到一个正确的结果。所以Vary字段就是看看到底要不要把这个文件从缓存中拿出来给A和B。
  • Server: nginx\r\n
    设置服务器名称
  • Powered-By-ChinaCache: HIT from CMN-WH-3-D08\r\n
    略去
  • CC_CACHE: TCP_HIT\r\n
    略去
  • Accept-Ranges: bytes\r\n
    表示该服务器是否支持文件的范文请求。也就是说,我不想要一整个文件,而是32Byte~1024Btye之间的文件。
  • \r\n

        实体体分析
在这里插入图片描述
按道理说应该只有箭头所指的地方才是实体体的内容,那么方框里面的内容是什么呢?目前我还是不知道。我还想要把这个实体信息复制下来看看是不是和书本上说到一样的,首先传输的是html页面,可能没有图片什么的。但是发现复制不了,所以这个还没有验证。

       这个是本人第一次实现抓包协议的分析,肯定有很多不足。之后如果有一些更新的话,再回来更新。

参考资料

HTTP协议常用头部实例详解(Request、Response)
https://blog.csdn.net/selinda001/article/details/79338766
Etag 和 If-None-Match
https://www.cnblogs.com/xuzhudong/p/8339853.html
【http】Keep-alive 知多少?作用?默认时长?
https://blog.csdn.net/qfzhangwei/article/details/90614253
从HTTP响应头看各家CDN缓存技术
https://segmentfault.com/a/1190000006673084
Http协议之Content-Length
https://blog.csdn.net/love_hot_girl/article/details/81163085
HTTP请求的响应头部Vary的理解
https://blog.csdn.net/qq_29405933/article/details/84315254
https://luchuan.iteye.com/blog/1058563


http://chatgpt.dhexx.cn/article/uhp32Vf4.shtml

相关文章

html将字符串转为数值,JavaScript字符串转数字的5种方法及其陷阱

JavaScript 是一个神奇的语言,字符串转数字有 5 种方法,各有各的坑法!下面本篇文章就来介绍一下JavaScript字符串转数字的5种方法及其陷阱,希望对大家有所帮助。 String 转换为 Number 有很多种方式,我可以想到的有 5 种!parseInt(num); // 默认方式 (没有基数) parseInt…

CenterNet代码解析

CenterNet代码解析 CenterNet网络 代码解析 代码网址:https://github.com/xingyizhou/CenterNet

【计算机视觉】PnP算法简介与代码解析-柴政(solvepnp理论篇)

PnP算法简介与代码解析-柴政 PnP求解算法是指通过多对3D与2D匹配点,在已知或者未知相机内参的情况下,利用最小化重投影误差来求解相机外参的算法。PnP求解算法是SLAM前端位姿跟踪部分中常用的算法之一,本次公开课,将详细讲述P3P、…

Polygon zkEVM节点代码解析

1. 引言 前序博客: Polygon zkEVM网络节点 相关代码: https://github.com/0xPolygonHermez/zkevm-node(Go语言) Polygon zkEVM节点提供的主要服务模块有: 1)JSON-RPC服务2)Sequencer服务3&…

ICCV2017跟踪算法BACF原理及代码解析

文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual Tracking. 代码下载地址:http://www.hamedkiani.com/bacf.html BACF就是将MCCF多通道特征应用到CFLB上,然后通过ADMM求解…

【深度学习2】基于Pytorch的WGAN理论和代码解析

目录 1 原始GAN存在问题 2 WGAN原理 3 代码理解 GitHub源码 参考文章:令人拍案叫绝的Wasserstein GAN - 知乎 (zhihu.com) 1 原始GAN存在问题 实际训练中,GAN存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。这…

YOLOv3:Darknet代码解析(四)结构更改与训练

背景:我们需要降低YOLOv2-tiny的参数量和存储量,以便硬件实现。 目的:更改YOLO结构,去掉后面的两层卷积层,降低参数量和运算量。 相关文章: YOLOv3:Darknet代码解析(一&#xff0…

StrongSORT(deepsort强化版)浅实战+代码解析

1.实战部分 1.1 具体操作 其实和之前的deepsort没差 到github上下载Yolov5_StrongSORT_OSNet下载对应的yolov5去替代原文件中yolov5下载yolov5权重(可以自动下载)和ReID权重(可能要科学上网)放到weight里面 ReID权重有点神秘&a…

对比学习 ——simsiam 代码解析。:

目录 1 : 事先准备 。 2 : 代码阅读。 2.1: 数据读取 2.2: 模型载入 3 训练过程: 4 测试过程: 5 :线性验证 6 : 用自己数据集进行对比学习。 第一: 改数据集 &#x…

AutoWare 代码解析

Auto Ware 代码解析系列(1) Auto Ware 是日本名古屋大学的开源无人车项目,下图为ros仿真环境下的各个节点的关系图: 代码库地址为:https://github.com/CPFL/Autoware 上面有较为详细的仿真环境配置信息,建…

FAST-LIO2代码解析(六)

0. 简介 上一节我们将while内部的IKD-Tree部分全部讲完,下面将是最后一部分,关于后端优化更新的部分。 1. 迭代更新 最后一块主要做的就是,拿当前帧与IKD-Tree建立的地图算出的残差,然后去计算更新自己的位置,并将更…

DeblurGAN-V2源代码解析

DeblurGAN-V2源代码解析(pytorch) DeblurGAN-V2是DeblurGAN的改进版,主要解决的是去图像运动模糊的问题,相比于DeblurGAN而言有速度更快,效果更好的优点。 论文:https://arxiv.org/pdf/1908.03826.pdf 代码…

mmsegmentation模型生成代码解析

前言 疫情在家办公,新Team这边习惯用MMLab开发网络,正好趁这段时间理解一下商汤大佬们的框架。我之前其实网络开发的比较少,主要是学习用的,而且开发网络基本是靠手写或者copy,用这种架构开发我是十分赞成的&#xff…

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳…

PX4代码解析(2)

前言 在大致了解PX4代码架构后,我们需要了解PX4的通信机制。在PX4代码架构中,每通信总线主要分为两个部分,一是内部通信总线uORB,即PX4内部进程通信采用的协议,例如PX4内部姿态控制需要获取飞行器姿态,而飞行器姿态是…

Teams Bot App 代码解析

上一篇文章我们讲了如何使用 teams toolkit 来快速弄一个 teams bot,可以看到 toolkit 给我们提供了极大的方便性,让开发人员可以更好的把重心放在 coding 上,而不是各种配置上。 那我们这篇文章主要接着上篇,来解析一下 teams b…

代码分析(一)

2021SCSDUSC 分析前言 对于APIJSON的代码分析首先就是,看一下该项目的作用以及如何进行,看一下原来不部署这个项目的正常流程: 再来看一下部署上APIJSON后项目的流程走向: 接下来开始按照这个流程对相应的代码进行分析。 Abst…

Linux命令之lsusb

一、lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 二、lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。 三、Linux从/var/lib/usbutils/usb.ids识别USB设备的详细信息。 语法格式 lsusb [参数] 常用参数: -v显…

Linux命令-磁盘管理-lsusb

1 需求 2 语法 C:\>adb shell lsusb --help Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)usage: lsusbList USB hosts/devices. 3 示例 adb shell lsusb 4 参考资料

嵌入式debian没有lsusb命令解决

问题 -bash: lsusb: command not found 解决