【HTTP】HTTP报文格式和抓包

ops/2024/9/24 19:33:11/
http://www.w3.org/2000/svg" style="display: none;">

文章目录

  • HTTP 是什么
  • HTTP 报文格式
  • 抓包工具
    • 抓包工具的原理
    • 抓包结果
      • 请求
      • 响应

IP,数据链路层,DNS… 都是理论为主,TCP/UDP 虽然有一些时间,但课堂内容不多

HTTP 理论和实践同样重要,未来作为 web 开发程序猿(写网站),HTTP 就是咱们工作中最常用到的东西,吃饭的饭碗

HTTP 是什么

HTTP 全称为“超文本传输协议”,是一种应用非常广泛的应用层协议

  • 文本就是字符串,能在 UTF8/GBK 码表上找到合法字符的
  • 超文本不仅仅是字符串,还可以携带一些图片,特殊的格式(标题,链接,表格…)
  • 富文本还可以设置行高,行间距等等更多

HTTP 最新的版本是 HTTP/3.0,但目前大规模使用的版本是 HTTP/1.1。2.0 和 3.0 引入了很多新的特性:

  1. 提高传输效率
  2. 提高传输的安全性

HTTP3.0 之前,在传输层是基于 TCP3.0 之后,传输层是基于 UDP。HTTP 3.0 基于 UDP 实现了一系列的更复杂的机制,可以确保可靠性,也不怕大数据包


使用 HTTP 的场景:

  1. 浏览器打开网站(基本上)
  2. 手机 APP 访问对应的服务器(大概率)

HTTP 协议最主要的应用场景就是网站、浏览器和服务器之间传输数据。客户端(手机,pc)和服务器之间的数据传输,也很可能是 HTTP


所谓网页,是通过 HTML 来构建的,HTML 也是一个“编程语言”,和 JavaC++画风差异很大。

  • C++Java 表达的是“逻辑”,你要做什么
  • HTML 则是描述的“内容”,你这里有什么

一个成熟的网页,光有 HTML 是不够的,还需要 CSSJavaScript 配合。(前端开发三剑客


HTTP 协议的交互过程,是非常典型的“一问一答”。对于网站来说,基本够用了
https://img-blog.csdnimg.cn/img_convert/837cb85f173c8a9541aac013fa30a47e.png" alt="image.png|488" />

TCP/UDP 这样的协议,具体是怎么样的模式,取决于你的代码实现,完全可以实现各种效果。但 HTTP 只能是“一问一答”的形式

HTTP 报文格式

抓包工具

抓包工具,本质上是一个“代理程序”,能够获取到网络上传输的数据,并显示出来,从而给程序猿提供一些参考。

wireshark,高大全,可以抓各种协议数据包,TCPIPUDP、以太网等等都可以抓,但是用起来比较复杂
fiddler,专注于 HTTP 的抓包,虽然功能没有 wireshark 丰富,但在抓 HTTP 上面的体验比 wireshark 更好

当前网络上的大部分请求都是基于 HTTPS 的(在 HTTP 的基础上进行了加密)

抓包工具的原理

需要关闭电脑上本身的代理程序,有的为了 fq,电脑上本身就有代理(单独的程序/浏览器插件)。要确保你其他的代理都是关闭状态,因为 fiddler 也是一个代理程序,代理之间会产生冲突


代理就是进行了一个请求转发的工作
https://img-blog.csdnimg.cn/img_convert/c3950e146e5ab6179cce96deb53a3055.png" alt="image.png|481" />

  • 正常来说,客户端(你)和服务器之间是直接通信的,你给服务器发请求,服务器给你返回请求
  • 引入代理之后,客户端要先把请求发给代理,代理再把请求转发给服务器;服务器把响应发给代理,代理再把响应转发给客户端
  • 代理是一个程序,而不是一个设备,工作在应用层。上述的转发都是站在应用层的角度

代理分为两种:

  1. 正向代理:客户端的代言人
  2. 反向代理:服务器的代言人

用来 fq 的代理,本质上是通过一个可以被访问到的境外服务器,部署代理服务器,这样就可以绕过防火墙https://img-blog.csdnimg.cn/img_convert/effb9d50a181c814c427176b80c6ae0d.png" alt="image.png|423" />

抓包结果

你的系统上有任何一个程序(不一定是浏览器)使用了 HTTP/HTTPS,此时就都能被 fiddler 给获取到

你电脑上的很多程序,会在你感知不到的情况下,在后台偷偷的做很多事情,和人家的服务器进行交互

  • 电脑上装了各种乱七八糟的程序,会在后台做很多事情,所以会越用越卡

打开一个网站,其实浏览器和服务器之间进行的 HTTP 交互不是只有一次,而是通常有很多次。

  • 第一次交互是拿到这个页面的 HTMLHTML 还会依赖其他的 CSSJS 和图片等。HTML 被浏览器加载之后,又会触发一些其他的 HTTP 请求,获取到 CSSJS 等。
  • 当执行 JS 的时候,JS 代码里可能又要触发很多的 HTTP 请求,获取到一些数据

https://img-blog.csdnimg.cn/img_convert/fa754cd92ab98eb322f4547a71393f2e.png" alt="image.png" />

  • 蓝色的表示返回的是一个 HTML
  • 往往是访问一个网站的入口请求

选中这个请求并双击,此时就能看到明细https://img-blog.csdnimg.cn/img_convert/020480ea1ef5041978c01a4f1026866a.png" alt="image.png|519" />

  • 上面是请求的明细
    在两行标签页中,RawHTTP 请求的原始数据,一般就看这个

  • 下面是响应的明细
    在标签页中,也是选择 Raw
    当你在记事本中打开响应的时候,会发现是乱码。因为当前响应数据是被压缩了的。网络传输中,带宽是一个比较贵的硬件资源(比 CPU 还贵),为了节省带宽,我们就可以把响应数据进行压缩(一般都是压缩响应,请求不太需要。请求比较小,响应比较大)

压缩和解压缩的过程,是需要消耗时间和 CPU

请求

HTTP 请求,包含四个部分

  1. 首行

三个部分使用空格来分割https://img-blog.csdnimg.cn/img_convert/63d66bf1a6654629c7d4e9de4474906a.png" alt="image.png|379" />


  1. 请求头header

从第二行,一直到后面都是请求头。类似于 TCP 报头/IP 报头一样,携带了一些重要的属性信息。https://img-blog.csdnimg.cn/img_convert/966478f16356ebc11a8c4c21271e0992.png" alt="image.png" />

TCP/IP 报头是以二进制方式组织的,而 HTTP 的是以文本的方式组织的

报头中包含了很多的键值对,每个键值对占一行,键和值之间用 : 空格来分割。此处的键值对都有哪些,都是什么含义,都是 HTTP 协议规定好的


  1. 空行

请求头最下面,会有一个空行,这个空行就可以表示结束标记


  1. 正文body

HTTP 的载荷部分,有的 HTTP 请求有 body,但有的没有

响应

HTTP 响应,也包含四个部分

  1. 首行

三个部分之间用空格来分割 https://img-blog.csdnimg.cn/img_convert/32d025e303015833c1a2622b94df15ca.png" alt="image.png|241" />

  • 状态码就描述了这次请求是成功还是失败。失败的原因

  1. 响应头

响应头中包含了很多的键值对,每个键值对占一行,键和值之间用 : 空格来分割。此处的键值对都有哪些,都是什么含义,都是 HTTP 协议规定好的https://img-blog.csdnimg.cn/img_convert/0f43dd145d5dd3140da9d67d39e62cd3.png" alt="image.png|289" />


  1. 空行

响应的结束标记https://img-blog.csdnimg.cn/img_convert/d4e7e91a6683dc780467e6a724191a44.png" alt="image.png" />


  1. 响应正文body

HTTP 的载荷,是 HTMLhttps://img-blog.csdnimg.cn/img_convert/83ade86e6a35bf717bac71952bb083c2.png" alt="image.png|585" />


http://www.ppmy.cn/ops/115422.html

相关文章

基于单片机多点无线温度监控系统设计

本设计STC89C52RC单片机作为主控芯片,能够远程监控多个位置的温度变化。使用一个主机来接收和监控三个从机收集到的温度信息,利用DS18B20温度传感器采集温度信息,采用GL24S无线通讯模块将数据传输给主机进行接收,信息显示在主机连…

BLE 设备丢包理解

前言 个人邮箱:zhangyixu02gmail.com在学习 BLE 过程中,总能听到 “丢包” 一词,但是我查阅资料又发现,有大佬说,ATT所有命令都是“必达”的,不存在所谓的“丢包”。而且我发现,在宣传 BLE 产品…

uniapp|微信小程序 实现输入四位数 空格隔开

<template><page-meta :page-style"cssVar"></page-meta><view class"container"><u-navbartitle"优惠券兑换"placeholderbgColor"#fff":autoBack"true":titleStyle"{fontFamily: SourceHa…

CentOS上使用Mosquitto实现Mqtt主题消息发布和订阅mqtt主题消息连同时间戳记录到文件

场景 CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载&#xff1a; CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载-CSDN博客 上面介绍了mosquitto的离线安装。 如果业务场景中需要订阅某mqtt主题的消息并将收到消息的时间以…

使用双向 LSTM 和 CRF 进行中文命名实体识别

使用双向 LSTM 和 CRF 进行中文命名实体识别 在自然语言处理中,命名实体识别(Named Entity Recognition,NER)是一项重要的任务,它旨在识别文本中的命名实体,如人名、地名、组织机构名等。本文将介绍如何使用双向 LSTM(Long Short-Term Memory)和 CRF(Conditional Ran…

力扣 困难 154.寻找旋转排序数组中的最小值 II

文章目录 题目介绍题解 题目介绍 题解 题源&#xff1a; 153.寻找旋转排序数组中的最小值 在此基础上&#xff0c;进行二分之前&#xff0c;单独处理一下左指针和最后一个数相同的情况就好了。 class Solution {public int findMin(int[] nums) {int left 0, right nums.le…

HTML常用的文本标签

常用文本标签 <span>: 元素没有特定含义 <b>: 定义粗体文字 <i>: 定义斜体文字 <em>: 定义着重文字 <strong>: 定义加重语气 <del>: 定义删除字 <span>文本标签</span><br><b>文本标签</b><b…

带你了解Linux系统数据恢复的方法

在Linux系统中&#xff0c;意外删除文件或文件损坏是一种常见情况&#xff0c;但幸运的是&#xff0c;您可以采取一些措施来尝试恢复这些文件。让我们一起来详细了解下Linux系统数据恢复的方法! 方法一&#xff1a;使用Undelete工具进行文件恢复 Undelete工具是一种常用的文件恢…