当前位置: 首页 > article >正文

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

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

HTTP 报文格式

抓包工具

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

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

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

抓包工具的原理

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


代理就是进行了一个请求转发的工作
image.png|481

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

代理分为两种:

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

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

抓包结果

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

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

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

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

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

image.png

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

选中这个请求并双击,此时就能看到明细image.png|519

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

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

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

请求

HTTP 请求,包含四个部分

  1. 首行

三个部分使用空格来分割image.png|379


  1. 请求头header

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

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

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


  1. 空行

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


  1. 正文body

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

响应

HTTP 响应,也包含四个部分

  1. 首行

三个部分之间用空格来分割 image.png|241

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

  1. 响应头

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


  1. 空行

响应的结束标记image.png


  1. 响应正文body

HTTP 的载荷,是 HTMLimage.png|585


http://www.kler.cn/a/311546.html

相关文章:

  • [极客大挑战 2019]PHP 1
  • wordpress实用功能A5资源网同款 隐藏下载框 支付框 需要登录才能查看隐藏的内容
  • 使用docker形式部署jumpserver
  • 2024一带一路暨金砖国家技能发展与技术创新大赛 (高职组)【网络安全防护治理实战技能赛项】
  • 金属箔电阻
  • 再见 阿里巴巴EasyExcel替代品EasyExcel-Plus即将诞生
  • C++初阶:STL详解(五)——vector的模拟实现
  • 【JOIN 详解】SQL连接全面解析:从基础到实战
  • PostgreSQL主从切换测试
  • 使用BGP及静态路由方式实现链路冗余和ByPass
  • C:字符串函数(完)-学习笔记
  • 北斗盒子TD20——水上作业的安全防线,落水报警守护生命
  • React 中的延迟加载
  • 音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现
  • AUTOSAR_EXP_ARAComAPI的5章笔记(6)
  • 高级java每日一道面试题-2024年9月18日-设计模式篇-JDK动态代理,CGLIB代理,AspectJ区别?
  • 组件封装有哪些注意事项—面试常问优美回答
  • 2024网站建设比较好的公司都有哪些
  • re题(35)BUUCTF-[FlareOn4]IgniteMe
  • Docker Redis 7.2.3 部署
  • Spark实操学习
  • 集合框架底层使用了什么数据结构
  • 关于 Goroutines 和并发控制的 Golang 难题
  • 【网络安全的神秘世界】目录遍历漏洞
  • AJAX Jquery $.get $.post $.getJSON
  • STP生成树