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

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

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

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

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

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

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

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...