当前位置: 首页 > 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 没有仔细看,感兴趣的同学可以自己去研究研究,多多…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...