【JavaEE初阶】HTTP协议与使用Fiddler抓包

news2024/11/16 21:47:27

目录

🎍HTTP协议是什么?

🍀应用层协议(HTTP)存在的意义

🎄HTTP 协议的工作过程

🌴HTTP 协议格式

🌳Fiddler抓包工具的使用

🚩如何抓HTTPS的包?

🎋抓包工具的原理

🌲抓包结果展示


🎍HTTP协议是什么?

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议

HTTP 诞生与1991年. 目前已经发展为最主流使用的一种应用层协议

发展阶段可以分为:以下几个阶段:

  • 0.9                                                                                                                                            这个版本的协议是适用于各种数据信息的简洁快速协议,但是远不能满足日益发展的各种应用的需要。0.9协议就是一个交换信息的无序协议,仅仅限于文字。由于无法进行内容的协商,在双发的握手和协议中,并有规定双发的内容是什么,也就是图片是无法显示和处理的。
  • 1.0                                                                                                                                            到了1.0协议阶段,也就是在1982年,Tim Berners-Lee提出了HTTP/1.0。在此后的不断丰富和发展中,HTTP/1.0成为最重要的面向事务的应用层协议。该协议对每一次请求/响应建立并拆除一次连接。其特点是简单、易于管理,所以它符合了大家的需要,得到了广泛的应用。
  • 1.1                                                                                                                                            在1.0协议中,双方规定了连接方式和连接类型,这已经极大扩展了HTTP的领域,但对于互联网最重要的速度和效率,并没有太多的考虑。毕竟,作为协议的制定者,当时也没有想到HTTP会有那么快的普及速度。
  • 2.0                                                                                                                                      HTTP2.0的前身是HTTP1.0和HTTP1.1。虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼。网络协议新版本并不会马上取代旧版本。实际上,1.0和1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。

最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的产品已经支持了

HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP实现)

目前我们主要使用的还是 HTTP1.1 和 HTTP2.0 . 当前文章上讨论的 HTTP 以 1.1 版本为主.

应用场景:

1)网页 = > 服务器之间的交互

我们平时打开一个网站, 就是通过 HTTP 协议来传输数据的.

当我们打开了一个b站,输入了一串网址的时候,此时就是在基于通过HTTP的方式和b站的服务器进行通信。浏览器就给b站的服务器发送了一个 HTTP 请求, b站的服务器返回了一个 HTTP 响应.

这个响应结果被浏览器解析之后, 就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片,字体等信息)

所谓 “超文本” 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据

2)手机app => 服务器之间的交互

比如打开一个外卖软件,加载一些食品列表数据以及下单操作,这些过程也是通过HTTP来完成的

虽然HTTP的作用很大,应用很广,但是实际开发中,不一定是真的直接使用HTTP,更大的概率是使用HTTPS(本质上是HTTP引入的加密层,s指安全,即叫做"超文本安全传输协议")。

🍀应用层协议(HTTP)存在的意义

我们已经学过 TCP/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程

可是,仅仅把数据从A点传送到B点就完了吗?

这就好比,在淘宝上买了一台电视,卖家[ 客户端 ]把手机通过顺丰[ 传送+路径选择 ] 送到买家 [服务器 ] 手里就完了吗?

当然不是,买家还要使用这款产品,还要在使用之后,给卖家打分评论。

所以,我们把数据从A端传送到B端, TCP/IP 解决的是顺丰的功能,而两端还要对数据进行加工处理或者使用,所以我们还需要一层协议,不关心通信细节,关心应用细节!

这层协议叫做应用层协议。而应用是有不同的场景的,所以应用层协议是有不同种类的,其中经典协议之一的HTTP就是其中的佼佼者.

再回到我们刚刚说的买电视的例子,顺丰相当于 TCP/IP的功能,那么买回来的手机都附带了说明书【产品介绍,使用介绍,注意事项等】,而该说明书指导用户该如何使用手机,此时的说明书可以理解为用户层协议

🎄HTTP 协议的工作过程

当我们在浏览器中输入一个 “网址”,此时浏览器就会给对应的服务器发送一个HTTP 请求。 对方服务器收到这个请求之后,经过计算处理, 就会返回一个 HTTP 响应。也就是典型的"一问一答"模式,请求和响应是一一对应的。

事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程.那么要想进一步的理解HTTP协议工作过程,以及理解HTTP的报文格式,就需要用到"抓包工具"。

抓包工具是指能够把网络上传输的HTTP数据获取到,并且能够显示出来。

HTTP抓包工具,种类有很多,比如浏览器(chrome就内置了抓包工具):

在浏览器页面通过 F12 打开 chrome 的开发者工具, 切换到 Network 标签页. 然后刷新页面即可看到如下图效果. 每一条记录都是一次HTTP 请求/响应

但是chrome自带的这个工具,看起来不够直观。推荐使用Fiddler。

🌴HTTP 协议格式

HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:

  • 请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体

请求行以方法字段开始,后面分别是URL字段和HTTP协议版本字段,并以CRLF结尾。SP是分隔符。除了在最后的CRLF序列中CF和LF是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。

应答报文格式如下:

  • 状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体

状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。

HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节

🌳Fiddler抓包工具的使用

  •  下载安装 

推荐使用必应搜索Fiddler进入官方下载:

  

这里呢有两个版本,我们只需要下载Fiddler Classic版本就好(该版本免费)

  

点击Try For Free

  

下载好后一路next就好

  • 抓包

我们打开该软件就可以直接开始抓包了

页面左侧包含你主机上所有进程http请求/响应数据

  

右侧是对左侧某个数据包双击之后的一个详细信息

  

我们对搜狗来进行抓包:这些结果都是浏览器打开搜狗网页的时候,给搜狗发送的http/https的请求数据。我们关注的是蓝色的数据,并且body这一列数据比较大的

    

双击之后,右侧的上方为请求数据的详情

    

右侧的下方是响应数据的详情

  

上述请求默认是Headers选项卡,对于这里面的请求数据我们看得并不是很清晰易懂,我们要选择Raw选项卡,Raw这个选项卡下的数据是一次http请求最原始的数据,其他选项卡下的内容,是不同风格对内容的展示。

    

这样的观察也不清楚,字体太小了,可以通过旁边的View in Notepad使用记事本打开

    

    

响应数据中也是选择Raw,也会响应数据的原始数据,其中可能会存在一些乱码的内容,点击黄色框框即可。也可使用记事本打开。

  

总结:

  • 左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
  • 右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 请求和响应的详细数据, 可以通过右下角的 View in Notepad 通过记事本打开.
  • 可以使用 ctrl + a 全选左侧的抓包结果, delete 键清除所有被选中的结果.

🚩如何抓HTTPS的包?

点击Tools

  

点击Options里面的HTTPS选项,然后将里面的选项全部打勾

  

这里值得注意的是,它会出现一个提示框,提示你是否安装一个证书,这里一定要选择是,如果不小心选择否,重装Fiddler

然后OK就可以开始抓HTTPS的包了。

🎋抓包工具的原理

Fiddler 相当于一个 “代理服务器”.

浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器.

当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器.

因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节, 都是非常清楚的

  

代理就可以简单理解为一个跑腿小弟. 你想买3.5元的冰红茶, 又不想自己下楼去超市, 那么就可以把钱给你的跑腿小弟, 跑腿小弟来到超市把钱给超市老板, 再把3.5元的冰红茶拿回来交到你手上. 这个过程中, 这个跑腿小弟对于 “你” 和 “超市老板” 之间的交易细节, 是非常清楚的

代理也有正向代理和反向代理,可以简单的理解为帮助客户端"跑腿"的为正向代理,帮助服务器"跑腿"的为反向代理。

🌲抓包结果展示

搜狗页面抓包结果,HTTP协议是一个文本格式的协议,本质上一个HTTP数据包,就是按照HTTP协议的格式,构造出一串文本,写道tcp socket中。

🚩HTTP请求

    

一个HTTP请求报文,分成四个部分

  • 1)首行,也就是上述记事本中的第一行

  

首行中又包含3个部分

(a)请求的方法,也就是GET,方法的意思就是描述了这次请求要干啥,GET的意思要从服务器获取某个数据

(b)请求的URL,请求的对方的网址,这里面的具体格式含义后序讲述

https://www.sogou.com/web?query=Fiddler&_asf=www.sogou.com&_ast=&w=01015002&p=40040108&ie=utf8&from=index-nologin&s_from=index&oq=&ri=0&sourceid=sugg&suguuid=&sut=0&sst0=1724663525730&lkt=0%2C0%2C0&sugsuv=1724661927128554&sugtime=1724663525730

(c)版本号 上述的HTTP1.1

使用空格来区分上述三个部分

  • 2)请求的报头(header)

从第二行开始到空白行之前,header中可以包含若干行数据,此处本质上是一个"键值对"结构,每一行是一个键值对,键和值之间用 : 分割。比如Host就是key,www.sogou.com是value

  

  •  3)空行 

header中最后一个键值对就是在空行之前,上述的header中,Cookie下面就是空行,这里的空行,起到一个结束标记的作用,类似与链表使用null作为结尾,这里也就是header遇到空行就结束

  • 4)正文 body

body是空行后面的内容,注意,正文是可选的,有些情况下有,有些情况下没有正文,像上述中就没有正文。

而且这里的body不是html中的body,http的body相当于tcp/ip等协议的载荷一样,这里的内容可以是任意的,也可以是完整html,也可以是完整的css/js,也可以是json数据,也可以是图片,也可以是文件,还可以是字体......(可以方任何你先要传输的数据)。

比如抓取某教务系统的登录:

      

这里的body就是一个json结构的数据,这个数据就包含了客户端(浏览器)要给服务器传输的一些必要数据。

🚩HTTP响应

    

  • 1)响应的首行

首行也是包含三个部分:

(a)版本号   HTTP/1.1

(b)状态码    200 

(c)状态码的描述   OK

所谓的状态码和状态码描述是一起的,反应了这是一个成功的响应还是一个失败的响应,如果失败了具体是啥样的原因,上述看到的200  OK就是成功。失败的原因有很多,所以对于的状态也有很多,最典型的就是404。

比如在搜狗上搜索123.html,这是一个不存在的地址

   

对应的抓包结果:点进去查看响应,对应的状态码就是404,描述就是Not Found

  

  • 2)响应的报头 Header

首行之后,空行之前的为Header,格式还是键值对,里面具体内容后序解释

  

  • 3)空行

Header的结束标记

  

  • 4)正文

正文中是什么都可以存储,可能也有空行或者没有,都表示内容,并不是结束标记。

  

🎍HTTP协议格式总结

由抓包可知协议格式如下

  

HTTP 报文中此处存在的 "空行"是因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者是 “报头和正文之间的分隔符”.HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.

总结:HTTP协议,请求格式和响应格式需要重点掌握,是我们日常开发中加面试的重点

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

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

相关文章

“视频号小店分销:让你的微信小店也能分销”

在数字时代的浪潮中,微信视频号利用其深厚的社交根基和庞大的用户基础,正逐渐成为新零售领域的一股新兴力量。特别是其视频号小店功能的推出,为商家提供了一个集商品展示、销售促进和营销策略于一体的全方位运营平台,实现了业务流…

医疗器械法规笔记

目录 前言医疗器械法规体系医疗器械监管注册与备案前言 之前的文章中介绍了与软件开发过程中相关的法规(网络安全),同时介绍了如何查找相关行业标准,这些都是平时工作中遇到的细节问题,没有系统性的呈现出医疗器械法规相关的框架,一直想对法规与标准有一个全面的认识和总…

java之继承与多态 1

1.继承的概念:它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展。 父类(超类):被继承的类。子类:继承父类的类。子类可以访问父…

OpenHarmony实战开发:Launcher应用安装问题分析报告

1 关键字 Launcher;Storage 2 问题描述 问题现象:安装应用到达 20 个以上后,重启设备,Launcher 页面没有任何应用图标 运行环境:硬件 dayu200,软件:3.1release 测试步骤: 使用…

DrawDB数据库设计工具本地部署结合内网穿透实现团队异地协作办公

文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 前言…

Redis集群技术

目录 一、Redis安装部署 二、Redis主从复制 三、Redis哨兵模式 1、开启Redis哨兵模式 2、Redis哨兵模式选举MASTER全过程 3、Redis哨兵模式数据丢失风险的解决方案 四、Redis Cluster 1、Redis集群部署 2、Redis集群扩容 1、加入MASTER集群 2、分配槽位 3、添加slav…

Linux:开发工具(3)

一、版本控制器git 安装git指令 yum install git 1.1 举例理解版本控制器 举个例子: 比方说老师要求我们交一份实验报告,而你的室友张三是一个非常勤奋的人,所以他很早就写好了第一版交给老师,但老师的要求很高,他觉得…

将 github 仓库同步到个人服务器

场景 把本地项目推送到Github仓库后,如果想部署到服务器上,可以尝试此方案 我的博客是hugo搭建的,每次更新文章会手动推送到Github仓库, 然后利用Actions 脚本自动推送到cf或者vercel 之前我写过一篇 将 hugo 博客搬迁到服务器…

STM案例一:灯闪烁

一、使用元件 STlink,STM32F103C8T6 二、接线方法 STM32与STLINK的接线方法为: GND-->GND DCLK-->SWCLK DIO-->SWDIO 3.3-->3.3V 三、配置调试器 选择魔术棒按钮,单击Debug,选择ST-link Debug,选…

免费JSON在线解析工具网址

1,https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2,https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

阿卡迈2.0逆向

阿卡迈(akamai)我也是第一次第一次搞 阿卡迈检测挺多例如 ua 屏幕 document 自动化检测等等 ,还有tls指纹 仅供学习参考吧 当cookie的_abck为 0表示通过,1表示不通过!!! 测试了两个2.0站全都通…

一款特别牛逼还免费的屏幕演示批注注释工具,教学演示工具

功能强大,还免费!PEVO Annotator 是一款功能强大的屏幕标注软件,广泛应用于教学演示、屏幕录像等场景。该软件支持多种操作系统,包括 macOS 和 Windows 。它提供了丰富的工具和功能,如画笔、直线、圆形、方形等形状绘制…

【海思3516DV500 | 开发环境】编译整个SDK全过程以及问题汇总

一、开发环境 上表是海思提供的Hi3519DV500 开发环境的各部分软件描述,实际用起来你就知道,可能有出入,尝试换Ubuntu 20.04折腾了好几天都不行,使用推荐的Ubuntu 18.04.2 64bit一个上午就行。 基本的硬件要求如下: ●…

Qt 解析多级XML

补充笔记:Qt 史上最详细 - “操作XML文件” - 笔记 一、如下图为XML文件 annotation为根节点, first第一节点,second第二节点,third第三节点。 二、实现解析xml文件,并将解析数据用QTreeView显示,实现代码…

AD9161调试问题

AD961同步信号SYNC无法保持高逻辑电 现象 配置ADF4351时钟芯片使其产生频率为1.6GHz的时钟为AD9161提供工作时钟,JESD的线速率配置为8Gbps,并配置AD9161的寄存器使其工作在2x内插模式以实现IQ信号的模数转换模式。同时根据AD9161芯片手册对ADF4351提供的…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢? 1.3 RDBMS和NOSQL的特点及优缺点: 二 Remote Dictionary Server 简介(redis) 2.1 什么是redis …

如何使用ssm实现物资进销存jsp

TOC ssm263物资进销存jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的…

JavaScript学习文档(4):循环结构、初识数组、数组案例、操作数组

目录 一、循环结构 1、for语句 2、for循环案例 3、for循环嵌套及案例 4、while语句 5、continue关键字 6、break关键字 二、初识数组 1、什么是数组 2、为什么要数组 3、数组的基本使用 三、数组案例 1、数组求和及平均值 2、数组求最大值和最小值 四、操作数组…

做集运初期到底要不要上系统?

在集运业务的起步阶段,很多老板都会有这样的疑问:“我的包裹量还不多,真的需要投入资金和时间来上系统吗?”这个问题听起来合理,但实际上却忽视了业务发展中更为重要的几个方面。 1.用户体验:服务的核心 首…

C语言经典案例分享

题目:输入三个整数 x、y、z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用 x 与 z 进行比较,如果…