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

【Java EE】-使用Fiddler抓包以及HTTP的报文格式

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【JavaEE】
分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》

主要内容:使用FIddler抓包的方法,使用FIddler抓包需要知道的注意事项。HTTP协议报文格式:首行,header,空白行,body。HTTP协议中可以自定义的属性。HTTP中get和post请求的区别。HTTP中的header的部分属性分析。HTTP响应状态码

在这里插入图片描述

文章目录

  • 一、使用Fiddler抓包
  • 二、HTTP协议报文格式
    • 1、Fiddler抓到的get和post方法的包
    • 2、HTTP报文格式中的详细信息
      • 2.1、`首行:`
      • 2.2、`header:`
      • 2.3、`空白行:`
      • 2.4、`body:`
    • 3、http协议中可以自定义的属性
  • 三、HTTP请求方法
    • 1、get和post请求的区别(重点)
    • 2、其它方法
  • 四、HTTP响应状态码

HTTP协议是 应用层 最广泛使用的协议之一,HTTP协议为 浏览器BS(客户端CS)和服务器的交互制定了 规范。

一、使用Fiddler抓包

理解:

HTTP协议的详细交互过程,可以借助第三方工具来看到,我们这里使用Fiddler,抓取HTTP的交互。(wireshark可以抓包传输层TCP/UDP,网络层IP,数据链路层mac等)

理解1:Fiddler本质上是一个代理程序,在客户端(浏览器)发出请求时,请求会先经过代理服务器,然后再到目标服务器,再返回响应给代理服务器,由代理服务器将响应返回给客户端。在请求和响应经过代理服务器时,代理服务器将请求和响应记录下来,再提供可视化界面。
理解2:代理服务器 可以分为 正向代理(客户端的代理),反向代理(服务器的代理)。上述例子就是正向代理,反向代理比如CDN服务器,企业将一些资源放在运营商的CDN服务器上,便于降低自己服务器压力,且提高客户访问效率。

使用Fiddler抓包注意事项:
1> Fiddler可能会与其它代理程序冲突,使用时要关闭其它代理程序,包括一些浏览器插件。
2> 需要开启HTTPS功能
3> 可能需要手动下载证书,并让导入到浏览器中

第二个注意事项:下载安装后是这样的:然后点:tools->options->https,然后把可以勾选的全部勾上。就开启了HTTPS功能。

在这里插入图片描述


第三个注意事项:如果浏览器中不导入证书,那么打开Fiddler访问网站时,可能无法访问(我就遇到了)!所以可能需要手动添加证书到浏览器。
具体操作:1> 选择信任该证书tools->options->https->actions->Trust Root
->Certificate->yes。2> 然后把证书放在桌面 actions->Export Root Certificate to Desktop 3> 在谷歌浏览器导入Fiddler证书:点击谷歌浏览器 右上角三个点->设置->隐私和安全->安全->滑到下面点击管理HTTPS/SSL证书->导入->下一页->浏览(把刚才保存在桌面的证书导入浏览器)->导入 4> Fiddler和浏览器都重新启动!
在这里插入图片描述

使用Fiddler:

1> 要抓包时,可以先点上面的工具栏 X->Remove all,清空原来抓到的包
在这里插入图片描述

2> 发送http请求,抓到包后找到我发送的包,双击就可以查看了。
在这里插入图片描述

    在右边的请求响应中,可以使用多种方式显示查看内容。
在这里插入图片描述

3> 发送完http请求后,返回Fiddler,选择file->Capture Traffic(或者F12),就可以暂时停止抓包,便于观察。

二、HTTP协议报文格式

1、Fiddler抓到的get和post方法的包

get请求:
在这里插入图片描述

post请求和响应:
在这里插入图片描述
在这里插入图片描述

  • 从上面的图示中我们可以发现,http的请求报文格式可以分成4个部分:首行、请求头(header)、空白行、请求体(body)。
  • 如果是get请求,则请求报文格式中没有body,因为get请求传输的信息放在了首行中;而post请求有body,传输信息放在body中。为什么这么说呢?请往下看。

2、HTTP报文格式中的详细信息

在这里插入图片描述

2.1、首行:

1> 请求行:请求报文中的首行

get方法:
在这里插入图片描述

post方法:
在这里插入图片描述

  • 其实get和post没有本质上的区别,但是携带数据的方式不同。在上图中我们可以看到,get请求的传输数据放在地址栏上,以键=值&键=值的方式传输;而post在地址栏上没有数据传输,传输数据放在body中发送。
  • 从上图我们可以知道,一个请求的首行可以分为 http方法 URL 协议版本
  • 下面我们来谈谈URL。一个get请求的URL可以分为协议名称 域名/ip 端口 路径 ?查询字符串,其中查询字符串以键=值&键=值的方式组织
    URL中的一些内容,是可以省略的!端口不写时,是服务器随机分配一个端口给客户端;路径可以是斜杠,比如http://www.baidu.com//代表http服务器的根目录;一个post请求则没有查询字符串,因为post一般不用于查询,而是提交数据。
    在这里插入图片描述

2> 响应行:响应报文中的首行。
响应行中get和post请求一样,都是 协议版本 状态码 状态描述,并且响应的状态描述可以省略,因为状态码其实已经描述了这次请求是否成功。
在这里插入图片描述

2.2、header:

header:包括请求头,响应头。这里我们主要说请求头,header中描述了http发送时的各种属性。我们主要我们来了解几个比较常用的,请往下看:

1> 请求头:请求部分的header

Fiddler抓到的qq登录的post的请求包的header:
在这里插入图片描述

  • Host:描述了这次请求的服务器所在的ip和端口,这个内容大概率是和URL中的内容一样,但也有一定概率不同,比如如果使用正向代理服务器,那么地址栏上的ip和端口是代理服务器的,但是Host这里的ip和端口则是你最终要访问的服务器的,而非代理服务器的ip和端口。
  • Content-Length:描述了这次请求 body 中的数据长度
  • Content-Type:描述了这次请求 body 中的数据格式
  • User-Agent:描述了客户端的 浏览器版本 和 操作系统的版本,用来区分是 pc端还是 移动端。
  • Referer:描述了当前页面的来源URL,如果直接通过地址栏输入地址,或者直接点击收藏夹,都是没有Referer的。我们用这个Referer的属性,来描述一个应用场景: 广告主需要浏览者从其他网站跳到自己的网站,从而达到打广告的目的。给其它网站(广告平台)发广告点击费时,需要按照网站的来源给相应的广告平台发钱,所以referer记录了其他网站(就是自己网站的来源),根据记录的这些其它网站就可以对应到相应的广告平台(浏览器)点击数量,从而正确的发钱。但http有一个问题,就是运营商劫持,运营商的路由器/交换机(可以完成五层转发的)等可以把 referer改变,运营商从中赚钱,但是改变了真实的情况。HTTPS就可以解决这样的问题。
  • Cookie:浏览器给 网页提供的 本地存储数据的机制(缓存机制),通过键值对的方式组织。
    1> Cookie从哪来?Cookie从服务器来,当浏览器向服务器发起第一次请求时,服务器根据 http响应中的报头(Set-Cookie)字段,决定Cookie要存什么
    2> Cookie存在那里?第一次请求时,服务器将Cookie返回给浏览器,浏览器 把它存在浏览器缓存中(和硬盘一样),通过浏览器 + 域名的方式组织大量的 Cookie,不同浏览器的Cookie不同,同一个浏览器的不同域名Cookie也不同。Cookie中内容不仅有键值对,还有过期时间
    3> Cookie往哪去?往服务器去。同一个用户可以开多个窗口,客户端同一时刻很多,那怎么知道哪个客户端上次访问的数据的是什么状态,就是使用Cookie。当浏览器第二次发送相同的域名请求时,会把和第二次请求相同的第一次请求对应的Cookie带上,服务器就可以知道这个请求对应的客户端的状态是怎么样的了。

2> 响应头:响应部分header

响应部分的属性和请求的header大部分一样,但是数据格式不一样:ContentType不同(和响应中body的数据格式对应)。
在这里插入图片描述

2.3、空白行:

空白行:get和post请求的空白行功能相同,都是作为header结束的标志

2.4、body:

包括请求体,响应体。
get请求没有请求体,post请求有请求体。

get/post 响应的body 可以是html,css,js,图片…

1> post请求的请求体(body):

注意:正文(请求体)中的内容格式和 响应报文 中的分析的 header 中的 Content-Type 密切相关.

  • application/x-www-form-urlencoded: form 表单提交的数据格式,此时 请求体body 的格式如下:
title=test&content=hello
  • multipart/form-data: form 表单提交的数据格式(在 form 标签中加上
    enctyped=“multipart/form-data” . 通常用于提交图片/文件,请求体body格式如下:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="text" 
title 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="file"; filename="chrome.png" 
Content-Type: image/png 
PNG ... content of chrome.png ... 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
  • application/json 数据为 json 格式,请求体body如下:
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16
a861fa2bddfdcd15"}

2> get/post 的响应体(body)

  • 在响应头中的Content-Type描述了 响应体(body)的数据格式。

text/html 类型的数据
text/css 类型数据
application/javascript 类型数据
application/json 类型数据

例如:application/json类型 的响应体如下:

{"msg":"操作成功","code":200,"token":"eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjIxYmU0YTczLTk0ODQtNGIwYi05Mjk1LWJmNTdiMzE2YWVmNSJ9.BrmJEZBh959TxJNi5A8tuG-cVaIBs2i51RKY6dlLjGKfwe3V9rRXt_FRRsdwrQd1pgc0b5jGalYvQLc_Rr60cg"}

3、http协议中可以自定义的属性

1> URL中的 路径
2> URL中的 query string
3> header中的键值对
4> header中的Cookie键值对
5> body

三、HTTP请求方法

1、get和post请求的区别(重点)

类型:

  • get请求的类型:
    1> 在浏览器地址栏输入url,回车
    2> 在html中的标签 link script img a等
    3> 使用ajax get请求,通过ajax异步获取数据,通常返回json数据格式
  • post请求的类型:
    1> 登录
    2> 上传文件

get和post的区别:
get和post,没有本质上的区别,只是在使用习惯上有以下几个区别:

  • 传输数据: GET传输数据 通过地址栏上的 query string(查询字符串);post则通过 请求体(body)
  • 用法: GET一般用于从服务器获取数据;POST一般用于给服务器提交数据
  • 幂等: GET请求 通常被设置成 幂等的;而POST不要求幂等。幂等就是多次输入相同请求,结果一样。
  • 缓存: 由于GET被设置成 幂等,GET可以被缓存;而POST不能被缓存。

另外1>以前的get请求存在传输上限,而如今rft标标准文档中没有明确的规定。2>不好说post比get更安全,安全应当是由https破除浏览器和服务器的中间人(黑客)来实现了安全(看下面的https加密流程),而get请求是显示信息在地址栏上,不好说不安全,因为我可以使用加密算法改变后,即使敏感信息出现在地址栏上,别人也看不懂。

2、其它方法

  • 在http方法中,get方法是最常用的,其次是post,其它方法不常用,比如下面几个方法。
    DELETE 删除服务器指定资源
    OPTIONS 返回服务器所支持的请求方法
    HEAD 类似于GET,只不过响应体不返回,只返回响应头
    TRACE 回显服务器端收到的请求,测试的时候会用到这个
    CONNECT 预留,暂无使用

四、HTTP响应状态码

响应行(状态行,首行)中 存在状态行,描述状态。

总的来说状态码可以这样分:
1** hold on(稍候)
2** here you are(成功)
3** go away(重定向)
4** you fucked up(客户端错误)
5** I fucked up(服务器端错误)

需要特殊记住的几个状态码:
200 ok 成功
302 重定向
404 not Found 访问资源不存在
403 forbidden 访问被拒绝(没有权限访问)
500 服务器内部错误(代码抛出异常)
504 gateway timeout (浏览器等候服务器响应超时)

相关文章:

【Java EE】-使用Fiddler抓包以及HTTP的报文格式

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容:使用FIddler抓包的…...

Java异步编程

Java异步编程 1、什么是java异步编程2、异步编程有什么作用3、异步编程常用于哪些业务4、异步编程的方式5、Async异步调用Async简介 1、什么是java异步编程 Java异步编程是一种处理并发问题的技术,它可以在执行耗时操作的同时,不阻塞主线程,…...

C++类与对象(二)——构造函数与析构函数

文章目录 一.类的默认6个成员函数二.构造函数1.引例2.构造函数的概念及特性 三.析构函数😋析构函数的特性 前言: 上篇文章初步认识了类以及类的相关知识,本篇将继续深入学习类与对象——类的默认6个成员函数: 一.类的默认6个成员函…...

c++标准模板(STL)(std::array)(四)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起) std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数…...

vue3计算属性

计算属性 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。推荐使用计算属性来描述依赖响应式状态的复杂逻辑 基础示例 不够好的示例 模板中使用了表达式&#xff0c;不够直观&…...

Java 中的访问修饰符有哪些(九)

Java 中的访问修饰符用于限制类、接口、字段和方法的访问范围&#xff0c;它们分别表示不同的访问控制级别。Java 中共有四种访问修饰符&#xff1a;public、protected、default 和 private。 public public 是最开放的访问修饰符&#xff0c;用于指定公共访问级别。被 publi…...

HR员工管理的三重境界:管事、管人、管心

在一个公司里&#xff0c;员工来来往往是常态&#xff0c;虽说我们不能替他们决定&#xff0c;但是一定是与公司的管理者有一定的关系。马云曾经说过&#xff1a;“一个员工离职&#xff0c;不外乎两种原因&#xff0c;一是钱没给到位&#xff1b;二是心里委屈了”。一句话就是…...

延迟队列与SpringBoot实战

延迟队列与SpringBoot实战 概念 延时队列,队列内部是有序的&#xff0c;最重要的特性就体现在它的延时属性上&#xff0c;延时队列中的元素是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列 …...

【算法】九键输入法

题目&#xff1a; 输入数字字符串, 输出这串字符对应的九键输入法有可能出现的所有情况 算法&#xff1a; 定义了一个全局变量 g_numStr&#xff0c;其中存储了每个数字对应的字母。定义了一个递归函数 str_combine&#xff0c;用于将每个数字对应的字母进行组合。str_combin…...

jvm之类加载器

写在前面 当我们通过javac命令将java源代码编译为Java字节码后&#xff0c;必须通过类加载器将其加载到jvm中才能运行&#xff0c;所以类加载器是jvm中非常重要的一个组成部分&#xff0c;本文我们就一起来看下吧&#xff01; 1&#xff1a;类的生命周期 类的生命周期如下图…...

Chapter4:频率响应法(上)

第四章:频率响应法 Exercise4.1 已知微分网络和积分网络电路图如下图所示,求网络的频率特性。 解: 【图 ( a ) ({\rm a}) (a)微分网络】 由微分网络电路图可得:...

【6. 激光雷达接入ROS】

欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】&#x1f973;&#x1f973;&#x1f973; 2345VOR鹏鹏主页&#xff1a; 已获得CSDN《嵌入式领域优质创作者》称号&#x1f47b;&#x1f47b;&#x1f47b;&#xff0c;座右铭&#xff1a;脚踏实地&#xff0c;仰望星空&#…...

Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后&#xff1a;成员变量和方法的访问特点五、继承后&#xff1a;方法重写六、继承后&#xff1a;子类构造器的特点七、继承后&#xff1a;子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…...

[angstromctf 2023] 部分

这个比赛打了个开头就放弃了&#xff0c;最近放弃的比较多&#xff0c;国外的网太慢&#xff0c;国内的题太难。 Crypto ranch 这题直接给出密文这提示 rtkw{cf0bj_czbv_nvcc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831} Caesar dressing is so 44 BC... 然后是加密程序…...

死信队列

死信队列 死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到queue 里了&#xff0c;consumer 从 queue 取出消息…...

基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

摘要&#xff1a;本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现&#xff0c;用于智能检测物体种类并记录和保存结果&#xff0c;对各种物体检测结果可视化&#xff0c;提高目标识别的便捷性和准确性。本文详细阐述了目标检测系统的原理&#xff0c;并给出MATLAB的实现代码…...

使用ChatGPT工具阅读文献的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

实训笔记1

实训笔记 第一天 1.安装tomcat或者其他大数据开发的路径不含中文及空格 2.和同开发 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoApp1oX-1683039421826)(C:\Users\18249\AppData\Roaming\Typora\typora-user-images\image-20230422110823748…...

CCD视觉检测设备如何选择光源

CCD视觉检测设备的机器视觉系统对光源的要求很高&#xff0c;光源是决定图像质量的一个重要因素。那么&#xff0c;我们就来看看CCD图像加网设备和机器视觉系统光源的选择点——CCD图像加网设备。 CCD视觉检测设备机器视觉系统光源选择要点&#xff1a; 1. 对比度&#xff1a;…...

基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic

1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析&#xff08;98/126&#xff09;&#xff1a;电商转化率优化与网站性能的底层逻辑 在电子商务领域&#xff0c;转化率与网站性能是决定商业成败的核心指标。今天&#xff0c;我们将深入解析不同类型电商平台的转化率基准&#xff0c;探讨页面加载速度对用户行为的…...