首页 > 其他分享 >【网络原理】——HTTP协议、fiddler抓包

【网络原理】——HTTP协议、fiddler抓包

时间:2024-10-23 20:17:25浏览次数:8  
标签:fiddler HTTP 请求 GET URL POST 抓包

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:认识HTTP

1:超文本传输

2:发展历史

3:HTML

4:交互过程

5:报文格式

6:HTTP请求格式

7:HTTP的响应格式

二:fiddler

1:介绍

2:设置

三:URL

1:认识URL

2:URL完整结构

3:URLencode

四:HTTP首行方法

1:什么是方法

2:GET

3:POST

(1)POST实践

(2)base64编码

4:POST和GET区别(重点)

5:误区


一:认识HTTP

1:超文本传输

HTTP协议是一种超文本传输协议

文本:就是我们平时说的字符串,可以用utf8/gbk这种码表找到合法的字符

超文本:不仅包含字符串,也可以是一些图片,格式,链接之类的

富文本:比超文本还NB,就是可以设置一些行间距,字体啥的(word文档)

2:发展历史

HTTP主要应用场景:网站,浏览器/客户端和服务器之间传输数据

HTTP2.0和3.0引入了很多特性:①提高传输效率②提高传输安全性

但是1.1版本还是主流版本(IPv6还没有全面覆盖)

3.0版本之前,传输层的协议是基于TCP;

3.0版本之后是基于UDP,这里实现的机制可以确保可靠性,也不拍数据量非常大的包

3:HTML

HTML是一种“编程语言”但是跟C++和Java差别还是比较大的,前者描述的是“内容”,后者表达的是“逻辑”。

我们说的“网页”就是通过HTML来构建的

HTML和CSS、JavaScript合称为“前端开发三剑客”

4:交互过程

典型的一问一答

打开一个网站,浏览器和服务器之间进行的HTTP交互不是只有一次,而是通常有很多次,第一次交互是拿到这个页面的html

html还会依赖其它的css和js等,heml被浏览器加载之后,又会触发一些其他的http请求............

5:报文格式

这里我们要用到一个工具——fiddler(先看第二部分fiddler安装)

为了节省带宽,以上看到的是被压缩后的数据(一般都是压缩响应,请求不太需要)

下面点击raw可以看到HTTP请求的原始数据

6:HTTP请求格式

(1)首行

包含:方法,URL(后面会讲到),版本号。共计三个部分,用空格分开

(2)请求头

从第二行开始一直到后面都是请求头(类似TCP报头,这里是以文本的形式组织的),报头中包含了很多键值对,每对键值占一行,键和值之间用:分割

(3)空行

请求头最下面会有一个空行,这个空行表示结束标记

(4)正文

也叫body,HTTP的载荷部分

7:HTTP的响应格式

(1)首行

包含:版本号,状态码,状态码的描述(彼此间用空格分割)

(2)响应头

键值对(同请求)

(3)空行

(4)正文(body)

响应的载荷是HTML

二:fiddler

1:介绍

抓包工具——本质上是一个代理程序,能够获取到网络上传输的数据,并显示出来。

注:这里的代理分为:正向代理(客户端的代言人)和反向代理(服务器的代言人)

例如:wireshark——非常齐全,可以抓取各种协议的数据包(包括但不限于:TCP、UDP、IP、以太网),使用比较麻烦

这里我们介绍的fiddler抓包工具(可以自己找资源下载哈),是专注于抓取HTTP协议的数据包。

这里是下载网站——Web Debugging Proxy and Troubleshooting Tools|Fiddler

2:设置

不小心点否的铁铁,只能卸载重新下载一遍了

你的系统中有任何一个程序使用了HTTP/HTTPS此时就都能被fiddler给获取到

三:URL

1:认识URL

URL——唯一资源定位符。描述一个网络上的资源位置

URI——唯一资源标识符(范围更大)

搜索fiddler

查询字符串也是键值对格式,使用&分割键值对;使用=分割键值

2:URL完整结构

(1)登录信息:现在不常用这种写法,都是“单独的登录界面”完成身份验证

(2)服务器地址/端口号:域名也可以是ip地址,如果没有端口号,浏览器会自动分配给你一个端口号(http 80 ;https  443)

(3)带层次的文件路径:可能会对应一个真实的硬盘文件,也可能对应一个虚拟的文件(后面会有例子)

(4)查询字符串:针对请求的内容做的补充说明

总结概括:通过ip知道服务器在哪,通过端口号知道程序是哪个,通过路径知道访问的是哪个资源

(5)片段标识符:用来表示当前页面的某个部分,通过不同的片段标识可以完成当前页面内的跳转

3:URLencode

在URL中本身有些特殊符号具有特定的含义,所以在query String里自定义键值对的时候如果包含同样的符号,就要对上述符号进行“转义”。

对于汉字也是要进行“转义”的,但是如果汉字的“utf8/gbk”等编码值中,某个字节恰好跟某个符号的ASCII码值相同就麻烦了,所以我们就用“%ASCII码”的形式进行表示了,例如

再举个例子搜索“蛋糕”两个字

在实际开发中,当要构造一个URL,尤其是URL中的query string 中要包含中文的时候,务必要进行编码

四:HTTP首行方法

1:什么是方法

把上面的图借用一下,现在我们展开讲方法

方法就是描述这个请求,想干啥

看着这么多方法,其实使用占比:GET占80%场景,POST占10%,剩余占10%可以这么理解

这些语义是“标准文档作者”推荐这么定义的,但实际定义权还是在咱们程序员自己手里

2:GET

GET:从服务器哪一个东西过来(读操作)。非常常见

3:POST

(1)POST实践

POST:网服务器放一个东西过去(写操作)

两个典型的使用场景——①登录②上传

我们打开一个登录界面(比如qq邮箱),然后用fiddler抓包

post请求中最后空行下还有东西就是载荷(正文,body),可以放任意前端和后端约定好的格式

(2)base64编码

这里介绍一个编码,,它的编码规则有标准版(无法作为加密方案),自定义版(可以作为一种简单的加密手段)

base64编码使用四个字节,对原始数据中的三个字节进行重新编码,目的是去除原始数据中的二进制内容(因为有些场合只能存储文本数据)

4:POST和GET区别(重点)

①两者本质上没有区别

使用GET的场景POST也能使用,反之如此,这里取决于你的代码是怎么写的(尤其是服务器和客户端都是自己实现的情况下)

②使用习惯上

GET习惯把数据放到URL的query string,POST习惯放到body中

反过来的话,有的服务器可能不支持GET把数据放到body中

③语义

标准文档中,GET是用来获取数据的,POST的语义是给服务器传输数据的

④幂等性

标准文档中,建议GET请求实现成幂等的,POST无要求

每次输入的内容一定,输出的结果也一定叫“幂等”

每次输入的内容一定,输出的结果不一定不叫“幂等”

⑤GET请求可以被浏览器收藏夹收藏,POST不行

5:误区

误区①:POST比GET安全

说法:登陆的时候,如果使用GET,密码就会显示在URL上,所以POST更安全

解释:即使是使用了POST,如果被抓包了,密码也会暴露

安全的前提在于加密!!!

误区②:GET传输的数据量小(传输的数据量有上限),POST传输的数据量更大

老版本的IE浏览器在实现的时候,对URL有长度限制。实际上HTTP标准文档中说了,对于GET和URL的长度不做限制,目前比较长的URL也是常见的

误区③:GET只能携带文本数据,POST可以携带二进制数据

URL通过query string来携带数据,query string只能包含文本,但是这里可以对二进制数据进行urlencode转换为文本数据,到了服务器在urlencode还原为二进制数据

POST请求中可以直接携带二进制数据,但是也有对二进制数据进行urlencode/base64转码的情况

标签:fiddler,HTTP,请求,GET,URL,POST,抓包
From: https://blog.csdn.net/2301_80133875/article/details/143180037

相关文章

  • HTTP协议
    什么是HTTP?◼什么是HTTP呢?我们来看一下维基百科的解释:超文本传输协议(英语:HyperTextTransferProtocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议;HTTP是万维网的数据通信的基础,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法;通过HTT......
  • HTTP 2.0 新特性
    HTTP2.0新特性HTTP2.0为什么使用二进制分帧?二进制协议比文本协议更加紧凑,减少占用空间分帧层相当于将HTTP切分,更加灵活,比如可以对header帧做单独的特殊处理分帧层有着属于自己的报文头,其中的StreamIdentity使得操作系统具备将多个响应以及请求一一匹配的能力,这个......
  • Java调用第三方接口、http请求详解,一文学会
    系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据......
  • Go语言net/http包源码学习
    0.前言该笔记为笔者第一次学习go的net/http包源码的时候所记,也许写的并不是很精确,希望大家多多包涵,一起讨论学习。该笔记很大程度的参考了网名为“小徐先生”的前辈所分享的博客,推荐大家可以先看一看它的博客来一起学习,我的只是照葫芦画瓢还有一些代码更新的讲解而已。当前笔者......
  • 为什么在http协议中使用base64编码方式传输二进制文件
    相关:图解Base64实现原理并使用js实现一个简单的Base64编码器常用加密方法之Base64编解码及代码实现一直都知道在http协议中使用base64的方式传递二进制文件,虽然感觉不理解,但是也都从来没有探究过原因,今天突然看到这方面的资料,这才有了一些理解。PS:把带有图片的网页......
  • 本地签发ssl证书(https)
    说明ssl证书主要用于https网络访问的安全认证工具下载本地自签证书程序https://github.com/FiloSottile/mkcert/releases命令行mkcert-v1.4.4-windows-amd64-?可以查看使用方法生成步骤1、mkcert-v1.4.4-windows-amd64-install 安装本地根证书2、生成自签证书:mkcert-v1.......
  • HTTP响应码、响应头、网址、重定向
    HTTP响应码、响应头、网址、重定向可以通过response对象的getcode()方法获得状态码,getheaders()方法获得响应头,geturl()方法获得网址。例子1:importsocketimporturllib.requestimporturllib.errorsocket.setdefaulttimeout(5)try:   res=urllib.request.urlopen('https:/......
  • 网站域名是https的,前端直接访问其他网站的http网址,为什么自动转成https的了
    当一个网站使用HTTPS(安全超文本传输协议)时,浏览器通常会自动将任何对HTTP(非安全超文本传输协议)网址的请求重定向到HTTPS版本。这种行为由多个因素引起,以下是一些可能的原因:1. HSTS(HTTPStrictTransportSecurity)HSTS是一种安全特性,允许网站声明被浏览器强制使用HTTPS。......
  • GD-WLAN登录页面抓包及curl模拟方法
    摘要:校园网Web认证界面点击登录时会发送一个Post请求,密码使用时间戳作为密钥进行RC4加密(后经验证,时间戳可为任意值),服务器根据密钥解密并验证账户与密码,验证通过便可以正常上网。因而可以采用curl等工具模拟Post请求,完成登录。实现路由器、服务器、手机、平板等快捷联网。......
  • HTTP和HTTPS基本概念,主要区别,应用场景
    HTTP和HTTPS是用于在网络中传输数据的协议,虽然它们的功能类似,但在安全性上存在显著差异。1. HTTP的基本概念定义:HTTP是一种无状态的、面向请求-响应的协议,用于客户端(如浏览器)和服务器之间传输超文本数据(HTML、CSS、JavaScript等)。工作原理:客户端向服务器发送请求,服务器处......