【HTTP】HTTP报文格式和抓包

简介: 【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 协议的交互过程,是非常典型的“一问一答”。对于网站来说,基本够用了

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

HTTP 报文格式

抓包工具

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

wireshark,高大全,可以抓各种协议数据包,TCPIPUDP、以太网等等都可以抓,但是用起来比较复杂

fiddler,专注于 HTTP 的抓包,虽然功能没有 wireshark 丰富,但在抓 HTTP 上面的体验比 wireshark 更好

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

抓包工具的原理

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


代理就是进行了一个请求转发的工作

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

代理分为两种:

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

用来 fq 的代理,本质上是通过一个可以被访问到的境外服务器,部署代理服务器,这样就可以绕过防火墙

抓包结果

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

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

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

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

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

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

选中这个请求并双击,此时就能看到明细

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

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

请求

HTTP 请求,包含四个部分

  1. 首行

三个部分使用空格来分割


  1. 请求头header

从第二行,一直到后面都是请求头。类似于 TCP 报头/IP 报头一样,携带了一些重要的属性信息。

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

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


  1. 空行

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


  1. 正文body

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

响应

HTTP 响应,也包含四个部分

  1. 首行

三个部分之间用空格来分割

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

  1. 响应头

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


  1. 空行

响应的结束标记


  1. 响应正文body

HTTP 的载荷,是 HTML


相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2577 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
163 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
977 14
|
4天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
221 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
734 9