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

简介: HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法

  image.gif 编辑

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

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

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

目录

一:认识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:发展历史

image.gif 编辑

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

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

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

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

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

3:HTML

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

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

HTML和CSS、JavaScript合称为“前端开发三剑客” image.gif 编辑

4:交互过程

典型的一问一答

image.gif 编辑

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

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

5:报文格式

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

image.gif 编辑

image.gif 编辑

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

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

image.gif 编辑

image.gif 编辑

6:HTTP请求格式

(1)首行

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

image.gif 编辑

(2)请求头

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

image.gif 编辑

(3)空行

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

(4)正文

也叫body,HTTP的载荷部分

7:HTTP的响应格式

(1)首行

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

image.gif 编辑

(2)响应头

键值对(同请求)

image.gif 编辑

(3)空行

image.gif 编辑

(4)正文(body)

响应的载荷是HTML

image.gif 编辑

二:fiddler

1:介绍

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

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

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

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

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

2:设置

image.gif 编辑

image.gif 编辑

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

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

image.gif 编辑

三:URL

1:认识URL

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

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

image.gif 编辑

搜索fiddler

image.gif 编辑

image.gif 编辑

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

2:URL完整结构

image.gif 编辑

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

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

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

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

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

image.gif 编辑

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

3:URLencode

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

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

image.gif 编辑

image.gif 编辑

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

image.gif 编辑

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

四:HTTP首行方法

1:什么是方法

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

image.gif 编辑

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

image.gif 编辑

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

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

2:GET

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

3:POST

(1)POST实践

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

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

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

image.gif 编辑

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

(2)base64编码

image.gif 编辑

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

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

image.gif 编辑

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转码的情况


相关文章
|
8天前
|
存储 网络协议 算法
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
HTTP/2通过HPACK压缩头部冗余信息,提升传输效率;并利用多路复用技术,在单个TCP连接上并行处理多个请求,避免队头阻塞,显著提升性能。同时支持服务器推送和流优先级设置,优化资源加载体验。
45 7
|
1月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
332 2
|
1月前
|
缓存 网络协议 UED
深度解析HTTP协议从版本0.9至3.0的演进和特性。
总的来说,HTTP的演进是互联网技术不断发展和需求日益增长的结果。每一次重要更新都旨在优化性能,增进用户体验,适应新的应用场景,而且保证了向后兼容,让互联网的基础架构得以稳定发展。随着网络技术继续进步,我们可以预期HTTP协议在未来还会继续演化。
336 0
|
2月前
|
XML 安全 网络架构
深度对比SOAP与HTTP协议:详细理解它们的工作原理和差异
在设计服务和系统交云策略时,考虑到上述差异是至关重要的。SOAP适合需要高安全性、可靠性和事务支持的企业级应用。而HTTP适合Web界面浏览、RESTful服务和需要快速响应的轻量级通信。根据具体需求和上下文,开发者可以选择合适的协议以实现最优的系统性能和用户体验。
295 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
总结和计划总是让人喜悦或镇痛,一方面以前一段时间没有荒废,能给现在的行动以信心,另一方面看到一年的时间并不能完成很多事情,需要抓紧时间。
701 0
|
Web App开发 前端开发
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
一、引言   最近在整理理大数据模式下的数据仓库数据模型,资料来自互联网和读过的数据仓库理论和实践相关。 二、3NF (1)1NF-无重复的列   数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
799 0
|
Web App开发 前端开发 数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
数据仓库建模:定义事实表的粒度Posted on 2015-08-25 09:03 xuzhengzhu 阅读(28) 评论(0) 编辑 收藏 维度建模中一个非常重要的步骤是定义事实表的粒度。
766 0
|
Web App开发 前端开发 数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
数据仓库建设步骤Posted on 2015-03-04 10:18 xuzhengzhu 阅读(1164) 评论(0) 编辑 收藏 1.系统分析,确定主题 确定一下几个因素:    ·操作出现的频率,即业务部门每隔多长时间做一次查询分析。
962 0