【网络原理】HTTP 协议的基本格式和 fiddler 抓包工具的用法

news/2024/10/18 8:27:08/

系列文章目录

网络通信基础】网络中的常见基本概念

网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)

网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

网络原理】TCP协议的相关机制(确认应答、超时重传)

网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

网络原理】IP协议的地址管理和路由选择

网络原理】数据链路层 及 DNS域名系统


目录

系列文章目录

一、什么是 HTTP ?

二、HTTP 协议的基本格式

抓包工具 Fiddler 的使用

HTTP 请求 

HTTP 响应

协议格式总结

三、认识 URL

URL encode


一、什么是 HTTP ?

整个网络原理中,按照TCP/IP五层模型,介绍了各个层次的核心协议。这里再重新谈谈应用层。

HTTP(超文本传输协议)是一种应用非常广泛的应用层协议.

https://img-blog.csdnimg.cn/direct/38e865935cf14bb084952067c507395f.png" width="911" />

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

https://img-blog.csdnimg.cn/direct/d5d76a353a5540b49a154dcb1baf2263.png" width="838" />

最新的 HTTP3 版本也正在完善中,目前 Google / Facebook 等公司的产品已经支持了。

HTTP往往是基于传输层的 TCP 协议实现的。(HTTP3之前,都是基于TCP实现的,HTTP3 基于UDP实现)

目前主要使用的还是 HTTP1.1 和 HTTP2.0。当前我们讨论的 HTTP 以 1.1 版本为主。

HTTP最主要的应用场景,就是网站,在浏览器和服务器之间传输数据。

https://img-blog.csdnimg.cn/direct/169b10f02a5b41ccb708aaec1891bbc4.png" width="1200" />当我们在浏览器中输入一个 搜狗搜索 的"网址"(URL) 时,浏览器就给搜狗的服务器发送了一个 HTTP 请求,搜狗的服务器返回了一个 HTTP 响应。HTTP协议的交互过程,是典型的一问一答模式。

这个响应结果被浏览器解析之后,就展示成我们看到的页面内容。(这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器会对应返回多个响应,这些响应里就包含了页面 HTML,CSS,JavaScript,图片,字体等信息)

二、HTTP 协议的基本格式

前面说到,我们访问一个网站的时候,可能涉及不止一次的 HTTP 请求/响应 的交互过程。这些交互过程,可以通过 Fiddler 工具进行抓包。(wireshark 可以抓各种协议数据包,使用起来更复杂,fiddler 专注于 HTTP 的抓包)

此处只介绍基本格式,具体内容暂不详细介绍。

抓包工具 Fiddler 的使用

下载地址:https://www.telerik.com/fiddler

进入该网站后,首先选择经典版(免费)

https://img-blog.csdnimg.cn/direct/ed68f79ea2a34e2ea40dbd8b25bba053.png" width="1200" />

第二步,填写信息,然后点击 Download

https://img-blog.csdnimg.cn/direct/accebb71524845adae5f90857750ae80.png" width="1200" />

最后安装过程就是一路 next,安装完成后,就可以通过开始菜单打开 Fiddler 工具。

 https://img-blog.csdnimg.cn/direct/45e73e53bfeb4019a8b53098c93393b6.png" width="629" />

接下来要抓包,需要进行一个简单的设置:

https://img-blog.csdnimg.cn/direct/64c95e8430a2481888c11fa327848588.png" width="540" />https://img-blog.csdnimg.cn/direct/b1ec9b38ba594c6d95a544d0537fc8c2.png" width="588" />

点击OK之后,会弹出一个对话框,提示你“是否要安装证书”,必须要点“是”,否则就得卸载重装了。

Fiddler 相当于一个“代理”(类似于外卖小哥的角色)。

当浏览器访问 sogou.com 时,就会把 HTTP 请求先发给 Fiddler,Fiddler 再把请求转发给 sogou 的服务器。当 sogou 服务器返回数据时,Fiddler 拿到返回数据,再把数据交给浏览器。

因此,Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节,都是非常清楚的。

https://img-blog.csdnimg.cn/direct/d652f44a55e04042b67cd5092a7bd717.png" width="913" />

如果上述的安装配置操作都完成,此时 Fiddler 就能抓到很多的数据包。这里的数据包只要系统上有任何一个程序(不一定是浏览器)使用了 HTTP/HTTPS,都能够被 Fiddler 给获取到。

https://img-blog.csdnimg.cn/direct/9023887325dd44ffb58c672ea68c6ec7.png" width="1200" />

  • 左侧窗口显示了所有的 HTTP 请求/响应,可以选中某个请求查看详情。
  • 右侧上方显示了 HTTP 请求的报文内容。(切换到 Raw 标签页可以看到详细的数据格式)
  • 右侧下方显示了 HTTP 响应的报文内容。(切换到 Raw 标签页可以看到详细的数据格式)
  • 请求和响应的详细数据,可以通过各位置右下角的 View in Notepad 通过记事本打开。

可以使用 ctrl + a 全选左侧的抓包结果,delete 清除所有被选中的结果。

HTTP 请求 

一个 HTTP 请求,主要包含四个部分:

1. 首行:【方法】+【url】+【版本号】

https://img-blog.csdnimg.cn/direct/edaf59290522452e9ebef811ea37961b.png" width="298" />

2. 请求头(Header):请求的属性,各属性是由 “冒号 + 空格” 分割的键值对;每组属性之间使用\n分割;遇到空行Header部分结束。

3. 空行:请求头和消息主体之间由一个空行分隔。

4. 消息主体(Body):空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。(有的HTTP请求有Body,有的没有)

https://img-blog.csdnimg.cn/direct/95dd7edb72b447189e8663e4c10c2faf.png" width="1200" />

该图中,除首行外,其余内容都是 请求头(Header),没有Body。

HTTP 响应

一个 HTTP 响应,也是包含四个部分:

1. 首行:【版本号】+【状态码】+【状态码解释】

https://img-blog.csdnimg.cn/direct/0898869f723f4f61b7747828374b65d9.png" width="183" />

2. 响应头(Header):请求的属性,各属性是由 “冒号 + 空格” 分割的键值对;每组属性之间使用\n分割;遇到空行表示Header部分结束。

3. 空行:响应头部和消息主体之间由一个空行分隔。

4. 消息主体(Body):空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在Body中。

https://img-blog.csdnimg.cn/direct/733e5e2de5c449ad8c8caadb6ea67798.png" width="1200" />

从该响应中,就能够清楚看到响应的四个主要部分了。

协议格式总结

https://img-blog.csdnimg.cn/direct/15b01d0f01d845829aea93cf6265cfc6.png" width="920" />

 HTTP报文中存在“空行”的原因:

  • HTTP 协议并没有规定报头部分的键值对有多少个。空行相当于是“报头的结束标记”,或者说是“报头和正文之间的分隔符”。
  • HTTP 在传输层依赖 TCP 协议,TCP是面向字节流的。如果没有这个空行标记,传输的时候就不知道哪里是报头,哪里是正文,就会出现“粘包问题”。

三、认识 URL

介绍完 HTTP 协议的基本格式后,再重点认识一下 URL。

URL(统一资源定位符,Uniform Resource Locator)是用于标识资源的位置和访问方式的地址。也就是平时我们俗称的“网址”.

URL 是一个非常重要的概念,早在 JDBC 的时候,就使用过 URL。

https://img-blog.csdnimg.cn/direct/b5748a49331b445e94a8bbbfd9e5f1ae.png" width="693" />

https://www.sogou.com 这就是一个最简单的 URL。

https:// 表示协议的名称;www.sogou.com 就是前面说过的域名。

一个完整 URL,结构还是比较复杂的:

https://img-blog.csdnimg.cn/direct/7337ffdaeb3446b881b50f653f7f333f.png" width="857" />

  • 服务器地址和端口号:此处使用域名表示,也可以使用IP地址(域名会通过DNS解析成具体的IP地址)。如果URL中不带端口号,浏览器就会自动给一个默认的端口(http-80;https-443)
  • 带层次的文件路径:指定资源在服务器上的路径,表示要访问该位置的资源。
  • 查询字符串(query string):以 ? 开头,包含由 & 分隔的键值对,键和值之间用 = 分隔。例如 ?name=zhangsan&age=20。键值对的取值和个数,完全由程序员自己约定,通过这样的方式,自己定制我们需要的信息传输给服务器。
  • 片段标识符:主要用于页面内跳转。

URL中的可省略部分:

  • 协议名:省略后默认为 http://
  • ip地址/域名:在 HTML 中可以省略,省略后表示服务器的 ip/域名 与当前 HTML 所属的 ip/域名一致。
  • 端口号:若省略,http 协议,端口号默认设为80;https 协议,端口号默认设为 443.
  • 带层次的文件路径:省略后相当于 / 。有些服务器会在发现使用 / 路径的时候,自动访问 /index.html
  • 查询字符串
  • 片段标识

URL encode

在URL中,本身有些特殊字符具有特定的含义,例如:/  : ?@ 等,因此这些字符不能随意出现。

当某个参数需要带有这些特殊字符(如query string),就必须先对特殊字符进行转义。

对于汉字,也是要进行转义的。一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成,虽然在 URL 中没有特殊含义,但是仍然需要进行转义。否则浏览器可能把汉字中某个字节当做 URL 中的特殊符号。

例如,在浏览器中搜索C++,查看此时的URL:

https://img-blog.csdnimg.cn/direct/fbde7a0efe5d4e4fb82984f13314c8d9.png" width="570" /> 

转义的规则如下:将需要转码的字符转为16进制,每2位做一位,前面加上%,编码成%XY格式。

对于 C++ 的 + 号进行转义,就是将 + 的 ASCII 码值拿出来,使用16进制表示,并且每2位前面加上%

https://img-blog.csdnimg.cn/direct/2e0c7b925bd3465c81057caa5a9acfff.png" width="1200" />

再看看搜索蛋糕,URL对蛋糕进行转义的情况(需要复制出来,浏览器中的URL展示还是中文):https://img-blog.csdnimg.cn/direct/cf9145c16bd546f48c29412f4bbf25a9.png" width="662" /> 

此处蛋糕的转义结果:%E8%9B%8B%E7%B3%95

https://img-blog.csdnimg.cn/direct/787ab1d34d0541e09a6a80dda7fa9b63.png" width="1200" />

URL decoding(URL解码)则就是URL encode的逆过程,用于将经过URL编码的字符串转换为原始的字符串形式。


http://www.ppmy.cn/news/1450098.html

相关文章

Ex1-C6油气化工防爆轮式巡检机器人

Ex1系列防爆轮式巡检机器人整机采用防爆设计,防爆等级为Exd II CT4 Gb。机器人通过无轨3D形态导航技术,结合360度防爆云台和无线防爆充电桩,实现整套防爆标准,可广泛应用于石油、燃气、化工、冶金等II类爆炸环境中,代替…

pyqt 按钮常用格式Qss设置

pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS(Cascading Style Sheets),但专门为 Qt 应用程序设计。使用 QSS&am…

ASP.NET图书馆管理信息系统

摘  要 本文首先阐述了基于.NET Framework平台的图书馆管理信息系统的开发背景以及其实践意义,其次说明了图书馆管理信息系统的功能以及相比同类软件的创新之处。然后就图书馆管理系统开发中所使用的一些的技术进行研究探讨。主要针对数据库的设计技术、存储过程…

第六十七章 使用 NSD (UNIX® Linux macOS)

文章目录 第六十七章 使用 NSD (UNIX Linux macOS)何时使用 NSDNSD 模块安装位置运营 NSD 第六十七章 使用 NSD (UNIX Linux macOS) 本页介绍如何在 UNIX、Linux 或 macOS 上使用网络服务守护程序 (NSD) 或与 Web Gateway 结合使用。这不是典型的安装,但在某些情况…

Elasticsearch 索引 blocks:深入探讨数据保护

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出,尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人(比如管理员和编码员)来说…

Effective Java

目录 一、创建和销毁对象 1.用静态工厂方法代替构造器: 2.考虑使用构建器: 3.用私有构造器或枚举类型强化Singleton属性: 4.通过私用构造器强化不可实例化的能力: 5.优先考虑依赖注入来引用资源: 6.避免创建不必…

OeceanBase开发者大会·2024精彩内容回顾

整理:菜根智库 菜根智库-IT精英们的资料库,解决方案分享平台,菜根老谭的VIP粉丝社群 2024年5月2日 主论坛 云时代的数据库 阳振坤 OceanBase 首席科学家 观看视频 下载 PDF AI时代的数据处理技术 陈文光 清华大学教授,蚂蚁技…

一对一WebRTC视频通话系列(一)—— 创建页面并显示摄像头画面

本系列博客主要记录WebRtc实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 一、创建html页面 简单添加input、button、video控件的布局。 <html><head><title>WebRTC demo</title></head><h1>…