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

HTTP协议格式以及Fiddler用法

目录

今日良言:焦虑和恐惧改变不了明天,唯一能做的就是把握今天

一、HTTP协议的基本格式

二、Fiddler的用法

1.Fidder的下载

2.Fidder的使用


  今日良言:焦虑和恐惧改变不了明天,唯一能做的就是把握今天

一、HTTP协议的基本格式

先来介绍一下http协议:

http 协议(全称为 "超文本传输协议"))是应用层最广泛使用的协议之一.

浏览器获取到网页就是基于http.

HTTP 就是浏览器和服务器之间交互的桥梁.

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

 这里介绍HTTP/1.1 版本.

HTTP往往是基于传输层的TCP协议实现的.

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

当我们在浏览器中输入一个 搜狗搜索的 "网址" (URL) , 浏览器就给搜狗的服务器发送了一个 HTTP 请求, 搜狗的服务器返回了一个 HTTP 响应,这个过程有一些重要知识点,博主之前的博客详细介绍过:
经典面试题:“从输入URL到展示出页面“这个过程发生了什么?_程序猿小马的博客-CSDN博客

接下来介绍HTTP协议的格式:

 HTTP请求可以分成四个部分:

1.首行

2.请求报头(header)

3.空行

4.正文(body)

HTTP响应也可以分成四个部分:

1.首行

2.响应报头(header)

3.空行       

4.正文(body)

HTTP请求:

1.首行:

包含三个部分,每个部分之间使用空格进行区分:

 GET: HTTP的方法(method)

 URL(俗称网址)

HTTP/1.1  版本号

method(方法)描述了这次请求的语义:想做什么.

 实际开发中,最常见的两个方法:GET  POST

触发GET请求:

1)在浏览器地址栏中直接输入URL

2)html 里的link script img a...

3)通过Js来构造get

 第一行是首行,剩下的都是header(请求报头)部分.

触发POST请求:

1)登录

2)上传文件

 如果是GET请求,没有body 如果是POST请求,一般有body.

POST请求的body内容中存放的数据和格式都是程序员自主定义的.

(面试题)GET 和 POST 之间的典型区别

本质上并没有什么区别,只是使用习惯上有区别:

1)就传递消息而言:

GET 也可以给服务器传递一些信息,GET传递的信息一般都放在query string.

   POST 传递消息则是通过body

2)语义上的差别(使用场景)

  GET 请求 一般是用于从服务器获取数据.

  POST请求一般是用于给服务器提交数据.

3)GET 通常会被设计成幂等的,POST 不要求幂等

  幂等:相同的输入,得到的结果是确定的.

4)GET 可以被缓存的,POST 则一般不能被缓存.

  把请求的结果保存下来,下次请求的时候,就不必真请求了,直接取缓存结果.

URL:唯一资源定位符.

标识了互联网上的唯一资源的位置(资源在哪个服务器的哪个目录下的哪个文件)

URL基本格式:

 协议方案名:  http 或者 https

登录信息:现在已经不使用了.

服务器网址:域名.

服务器端口号:描述的是哪个程序.

带层次的文件路径:找到程序管辖下的文件.

查询字符串:获取资源的时候带的参数.

片段标识符:现在也不考虑.

URL最关键的四个部分:

1.域名/IP

2.端口号

3.带层次的文件路径

4.查询字符串

一个URL的这几个部分,有些是可以省略的:

例如:    https://www.baidu.com/

省略端口:此时浏览器会提供默认端口.对于http来说,默认端口是80,对于https,默认端口443.

com后面的 /  也是路径,没省略,只是有点短,代表HTTP服务器的"根目录".

查询字符串(query string)以 ? 开头

以键值对的方式组织

键值对之间使用 &,

键和值之间使用 = 分割

URL有些字符是有特定含义的,就需要对内容进行重新编码,如果不编码直接写成中文,浏览器可能就无法正确识别了.

2.Header(请求报头)部分

请求报头部分都是一堆键值对,每一行是一个键值对,键和值之间使用:分割.

这些键值对都是HTTP事先定义好的,有特定的含义.

介绍一些重要的Header属性:

HOST

大概描述了服务器所在的地址和端口

Host 这里的地址和端口,用来描述最终要访问的目标.

这个内容大概率和URL中是一样的,也有一定的情况下是不同的.

Content-Length

表示body中的数据长度

Content-Type

表示请求的body中的数据格式

如果是GET请求,没body,请求中没有上述两个字段.

如果是POST请求,有body,必须要有上述两个字段.

User-Agent(简称UA)

描述了浏览器和操作系统的版本.

现在主要用于区分PC端和移动端.

Referer

当前页面的来源.

如果直接通过地址栏输入地址,直接点击收藏夹,都是没有referer

Cookie

非常重要的header 属性

本质上是 浏览器 给网页提供的 本地存储数据 的机制.

为了保证安全,默认是不允许网页访问计算机硬盘的.

Cookie 就是浏览器对于访问硬盘做出了明确的限制.

Cookie 就是通过键值对的方式来组织数据的.

网页就可以把一部分键值对放在Cookie中,以便于后面使用.

Cookie 中的具体存的内容都是程序猿自定义的.

通过下面的步骤可以观察到Cookie中的内容:

 

Cookie 中的数据来自于服务器.

服务器会通过HTTP响应的报头部分(Set-Cookie 字段),将返回的数据放到Cookie里面.

服务器来决定,浏览器的Cookie要存什么

Cookie 可以认为是存在于浏览器中,存在于硬盘的.

Cookie 在存的时候,是按照 浏览器 + 域名 的维度来进行细分的.

不同的浏览器,各自存各自的Cookie,

同一个浏览器不同的域名,对应不同的Cookie

Cookie 里面的内容不光是键值对,同时还有过期时间,比如:

有很多网站,登陆一次之后,自动记录登录状态.

Cookie 要回到服务器这里.

客户端同一时刻有很多个.

客户端这边就会通过Cookie来保存当前用户使用中间状态,客户端访问浏览器的时候,就会自动的把Cookie 的内容代入到请求中.然后服务器就能够知道现在客户端是啥样子了.

Cookie 里存在的往往是”上下文”这样的状态.

当浏览器保存好Cookie 之后,后续再给服务器发送请求的时候,就会自动带上这样的cookie.

Cookie 就像是服务器在浏览器这边建立的"寄存处"一样.


 

HTTP响应:

 1.首行

 也包含三个部分,每个部分之间使空格分开.

 HTTP/1.1  版本号

200: 状态码

OK: 状态码描述

HTTP 状态码描述了这次响应的结果(成功或者失败以及失败原因等...)

 这么多的状态码是可以分成上述五大类:

2**  一般表示成功.

3** 一般表示重定向.

4** 一般表示客户端错误

5** 一般表示服务器错误

介绍几个常见的状态码:

200    ok    成功了

301    永久重定向

302    临时重定向

403   访问被拒绝(没有权限)

404   访问的资源不存在,在服务器上没找到.

500   服务器内部错误(服务器代码抛出异常了)

504  响应时间太久,浏览器等不及了.

理解重定向:

假设申请一个域名为: /hello  使用一段时间以后,要更换为:/hello2,当换完域名以后,配置重定向,如果有人访问之前的域名,就可以跳转到新的域名.

重定向这样的响应报文中,会在header里有个Location 属性,通过这个属性来描述要跳转到哪个新的地址.(重定向方便进行网站迁移)

 

 

二、Fiddler的用法

http 协议的交互详细过程可以借助第三方的工具来看到的,这个工具称为"抓包"工具.Fiddler就是其中之一.

1.Fidder的下载

在浏览器中直接搜索Fiddler,然后选择如图:

然后里面内容随便填好以后,点击下载即可.

 下载好安装以后,就可以开始使用Fiddler.

2.Fidder的使用

 打开Fiddler以后,左侧就会立刻显示出当前电脑上某个程序使用http和服务器交互的过程.

 Fiddler 本质上是一个代理程序,使用的时候有两个注意事项:

1)Fiddler 使用的时候,可能会和别的代理程序冲突,使用的使用要关闭其他的代理程序.

   如图所示:

2)开启HTTPS功能才能正确抓包.

   https协议是基于http协议的安全版协议.

   当下互联网上绝大部分的服务器都是https的,fiddler 默认不能抓https的包,需要手动启动https并且安装证书才能抓https的包.

勾选上面4个复选框,fiddler 才能抓取https. 首次勾选的时候,会弹出一个对话框,是一些英文,意思是:你是否要安装对应的证书.   一定要选择:是!!!

小技巧:ctrl+A 选中左侧请求列表中的所有选项,然后ctrl+X 可以全部删除.

观察左侧抓到的包:

 蓝色的说明这是个html页面.这是我们最关注的,其它的请求都是基于这个请求产生.

绿色的是js

黑色的是一些返回数据.

双击左侧的请求列表中的选项,查看到请求的详细情况.

http 请求是有一定格式的,fiddler 会按照格式解析,呈现出不同的显示效果, 选择Raw查看最初的效果.

选择右下角的 View in Notepad 在记事本中打开.

​ 

 观察抓包结果,可以看到,当前http请求是一个行文本格式的数据,相比于二进制的数据,用户可以更方便的直接观察.

观察响应(下图).

 在记事本中打开:

 会发现记事本出现乱码.这是因为,响应数据本来也是行文本数据,但是有的服务器会对响应进行压缩,变成二进制的数据了,如果想要观察到行文书数据,点击:

然后,再次在记事本中打开.

​ 会看到没有乱码了.

以上就是Fiddler的基本用法了.

相关文章:

HTTP协议格式以及Fiddler用法

目录 今日良言:焦虑和恐惧改变不了明天,唯一能做的就是把握今天 一、HTTP协议的基本格式 二、Fiddler的用法 1.Fidder的下载 2.Fidder的使用 今日良言:焦虑和恐惧改变不了明天,唯一能做的就是把握今天 一、HTTP协议的基本格式 先来介绍一下http协议: http 协议(全称为 &q…...

自动写代码?别闹了!

大家好,我是良许。 这几天,GitHub 上有个很火的插件在抖音刷屏了——Copilot。 这个神器有啥用呢?简单来讲,它就是一款由人工智能打造的编程辅助工具。 我们来看看它有啥用。 首先就是代码补全功能,你只要给出函数…...

项目心得--网约车

一、RESTFULPost:新增Put:全量修改Patch:修改某个值Delete: 删除Get:查询删除接口也可以用POST请求url注意:url中不要带有敏感词(用户id等)url中的名词用复数形式url设计:api.xxx.co…...

【二叉树广度优先遍历和深度优先遍历】

文章目录一、二叉树的深度优先遍历0.建立一棵树1. 前序遍历2.中序遍历3. 后序遍历二、二叉树的广度优先遍历层序遍历三、有关二叉树练习一、二叉树的深度优先遍历 学习二叉树结构,最简单的方式就是遍历。 所谓二叉树遍历(Traversal)是按照某种特定的规则&#xff…...

Spring Cloud微服务架构必备技术

单体架构 单体架构,也叫单体应用架构,是一个传统的软件架构模式。单体架构是指将应用程序的所有组件部署到一个单一的应用程序中,并统一进行部署、维护和扩展。在单体架构中,应用程序的所有功能都在同一个进程中运行,…...

TCP三次握手与四次挥手(一次明白)

TCP基本信息 默认端口号:80 LINUX中TIME_WAIT的默认时间是30s TCP三次握手 三次握手过程:每行代表发起握手到另一方刚刚收到数据包时的状态 客户端服务端客户端状态服务端状态握手前CLOSELISTEN客户端发送带有SYN标志的数据包到服务端一次握手SYN_SENDLISTEN二次握手服务端发送…...

pyside6@Mouse events实例@QApplication重叠导致的报错@keyboardInterrupt

文章目录报错内容鼠标事件演示报错内容 在pyside图形界面应用程序开发过程中,通常只允许运行一个实例 假设您重复执行程序A,那么可能会导致一些意向不到的错误并且,从python反馈的信息不容易判断错误的真正来源 鼠标事件演示 下面是一段演示pyside6的鼠标事件mouseEvent对象…...

订单30分钟未支付自动取消怎么实现?

目录了解需求方案 1:数据库轮询方案 2:JDK 的延迟队列方案 3:时间轮算法方案 4:redis 缓存方案 5:使用消息队列了解需求在开发中,往往会遇到一些关于延时任务的需求。例如生成订单 30 分钟未支付&#xff0…...

< 开源项目框架:推荐几个开箱即用的开源管理系统 - 让开发不再复杂 >

文章目录👉 SCUI Admin 中后台前端解决方案👉 Vue .NetCore 前后端分离的快速发开框架👉 next-admin 适配移动端、pc的后台模板👉 django-vue-admin-pro 快速开发平台👉 Admin.NET 通用管理平台👉 RuoYi 若…...

内网渗透-基础环境

解决依赖,scope安装 打开要给cmd powershell 打开远程 Set-ExecutionPolicy RemoteSigned -scope CurrentUser; 我试了好多装这东西还是得科学上网,不然不好用 iwr -useb get.scoop.sh | iex 查看下载过的软件 安装sudo 安装git 这里一定要配置bu…...

Go语言学习的第一天(对于Go学习的认识和工具选择及环境搭建)

首先学习一门新的语言,我们要知道这门语言可以帮助我们做些什么?为什么我们要学习这门语言?就小wei而言学习这门语言是为了区块链,因为自身是php出身,因为php的一些特性只能通过一些算法模拟的做一个虚拟链&#xff0c…...

C和C++到底有什么关系

C++ 读作”C加加“,是”C Plus Plus“的简称。顾名思义,C++是在C的基础上增加新特性,玩出了新花样,所以叫”C Plus Plus“,就像 iPhone 6S 和 iPhone 6、Win10 和 Win7 的关系。 C语言是1972年由美国贝尔实验室研制成功的,在当时算是高级语言,它的很多新特性都让汇编程序…...

14个Python处理Excel的常用操作,非常好用

自从学了Python后就逼迫用Python来处理Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。 这也是我写这篇文章的初衷。废话不说了,直接进入正题。 数据是网上找到的销售数据,长这样: 一、关联公式:…...

async/await 用法

1. 什么是 async/await async/await 是 ES8(ECMAScript 2017)引入的新语法,用来简化 Promise 异步操作。在 async/await 出 现之前,开发者只能通过链式 .then() 的方式处理 Promise 异步操作。示例代码如下: import …...

好意外,发现永久免费使用的云服务器

原因就不说了,说一下过程,在百度搜pythonIDE的时候,发现了一个网站 https://lightly.teamcode.com/https://lightly.teamcode.com/ 就是这个网站,看见这个免费试用,一开始觉得没什么,在尝试使用的过程中发…...

VSCode使用技巧,代码编写效率提升2倍以上!

VSCode是一款开源免费的跨平台文本编辑器,它的可扩展性和丰富的功能使得它成为了许多程序员的首选编辑器。在本文中,我将分享一些VSCode的使用技巧,帮助您更高效地使用它。 1. 插件 VSCode具有非常丰富的插件生态系统,通过安装插…...

SQL执行过程详解

1 、用户在客户端执行 SQL 语句时,客户端把这条 SQL 语句发送给服务端,服务端的进程,会处理这条客户端的SQL语句。 2 、服务端进程收集到SQL信息后,会在进程全局区PGA 中分配所需内存,存储相关的登录信息等。 3 、客…...

【物联网NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器

【NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器1. 前言2. 官方说明3. 安装PM24. PM2常用命令4.1 启动命令4.2 重新启动命令4.3 热重载命令4.4 停止命令4.5 删除命令4.6 查看进程运行状态4.4 显示某一个进程的具体信息4.8 显示日志信息4.9 终端监控…...

【C++学习】【STL】deque容器

dequeDouble Ended Queues(双向队列)deque和vector很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内…...

当 App 有了系统权限,真的可以为所欲为?

看到群里发了两篇文章,出于好奇,想看看这些个 App 在利用系统漏洞获取系统权限之后,都干了什么事,于是就有了这篇文章。由于准备仓促,有些 Code 没有仔细看,感兴趣的同学可以自己去研究研究,多多…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...