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

系列文章目录

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

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

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

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

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

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

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


目录

系列文章目录

一、什么是 HTTP ?

二、HTTP 协议的基本格式

抓包工具 Fiddler 的使用

HTTP 请求 

HTTP 响应

协议格式总结

三、认识 URL

URL encode


一、什么是 HTTP ?

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

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

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

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

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

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

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

当我们在浏览器中输入一个 搜狗搜索 的"网址"(URL) 时,浏览器就给搜狗的服务器发送了一个 HTTP 请求,搜狗的服务器返回了一个 HTTP 响应。HTTP协议的交互过程,是典型的一问一答模式。

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

二、HTTP 协议的基本格式

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

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

抓包工具 Fiddler 的使用

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

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

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

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

 

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

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

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

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

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

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

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

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

HTTP 请求 

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

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

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

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

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

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

HTTP 响应

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

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

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

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

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

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

协议格式总结

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

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

三、认识 URL

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

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

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

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

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

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

  • 服务器地址和端口号:此处使用域名表示,也可以使用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:

 

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

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

再看看搜索蛋糕,URL对蛋糕进行转义的情况(需要复制出来,浏览器中的URL展示还是中文): 

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589183.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

下载安装 VisualVM

1、下载安装 VisualVM 第1步:下载地址:https://visualvm.github.io/ 第2步:解压到制定位置 第3步:指定jdk路径 下载完成后,在etc文件夹下找到visualvm.conf文件,设置jdk路径visualvm_jdkhome"D:\ITS…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性)

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性) 1. ElasticSearch安装(略)2. ElasticSearch基础功能2.1 索引操作2.1.1 创建索引2.1.2 Head 索引2.1.3 查询索引2.1.3.1 查询单独索引2.1.3.2 查询…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业,简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了,…

邊緣智能2024—AI開發者峰會(5月9日)數碼港即將啟幕

隨著 AI (人工智能)技術的飛速發展,我們正迎來邊緣計算智能化與分布式AI深度融合的新時代,共同演繹分布式智能創新應用的壯麗篇章。"邊緣智能2024 - AI開發者峰會"將聚焦於這一前沿領域,探討如何通過邊緣計算…

中国发布首个汽车大模型标准

🦉 AI新闻 🚀 中国发布首个汽车大模型标准 摘要:中国信息通信研究院于4月28日发布了国内首个汽车大模型标准,标志着汽车行业正式迈向“人工智能+”时代。该标准包含三个核心能力域:场景丰富度、能力支持度…

Pytorch学习笔记——环境配置安装

1、下载和配置环境 Anacodna必备(工具包里面都包含的有,集成与运用科学分析的软件,比较方便) 点击这个网页:Download Now | Anacondahttps://www.anaconda.com/download/success 按照教程安装(教程可以自己在网上搜…

XY_RE复现(五)

一&#xff0c;给阿姨倒一杯卡布奇诺 是一道魔改TEA加密 给出了一些初始化&#xff0c;然后输入的flag拆分&#xff0c;两两一组&#xff0c;通过for循环放入encrypt加密函数 #include <stdio.h> #define uint32_t unsigned intvoid decrypt(uint32_t *v, uint32_t *ke…

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型&#xff0c;是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割&#xff0c;并在每个分割节点上将拆分的订单进行提交。例如&#xff0c;可以将某个交易日的交易时间平均分为N 段&am…

守护数据安全: 零信任视角下的勒索病毒防范之道

前言 就在近日&#xff0c;鸿海集团旗下半导体设备大厂——京鼎精密科技股份有限公司&#xff08;以下简称“京鼎”&#xff09;遭到了黑客的入侵。黑客在京鼎官网公布信息直接威胁京鼎客户与员工&#xff0c;如果京鼎不支付赎金&#xff0c;客户资料将会被公开&#xff0c;员…

pyqt 滑动条控件QSlider

pyqt 滑动条控件QSlider 滑动条控件QSlider效果代码 滑动条控件QSlider QSlider 是 PyQt中的一个控件&#xff0c;它允许用户通过拖动滑块或点击滑块轨道上的任意位置来选择一系列值。 QSlider 有两种主要的类型&#xff1a;Qt.Horizontal&#xff08;水平滑块&#xff09;和 …

java版数据结构:深入理解栈和队列:数据结构与应用(vector,stack,queue)

目录 前言 动态数组类&#xff08;vector&#xff09; 特点&#xff1a; 应用&#xff1a; 栈&#xff08;Stack&#xff09; 栈的基础概念&#xff1a; 栈的常用方法&#xff1a; 模拟栈操作&#xff1a; 队列&#xff08;Queue&#xff09; 队列的基础概念 队列的常…

VS Code工具将json数据格式化

诉求&#xff1a;json数据格式化应该在工作中用到的地方特别多&#xff0c;为了更方便、更仔细的对json数据查看&#xff0c;将json数据格式化是非常有必要的。 VS Code中如何将json数据快速格式化 1、在VS Code中安装Beautify JSON插件 2、安装完后在需要格式化的文件中按住…

Easy TCP Analysis上线案例库功能,为用户提供一个TCP抓包分析案例分享学习的平台

​案例库&#xff0c;提供给用户相互分享TCP抓包故障排查案例或是经典学习案例的功能&#xff0c;任何用户都可从案例库查看其它用户分享的案例&#xff0c;每个用户也都可以上传自己的案例&#xff0c;经过平台审核去重即可展示在案例库。 对于学习&#xff0c;最典型的三次握…

Linux进程概念(下)

Linux进程概念 1. 命令行参数2. 环境变量2.1 环境变量的概念2.2 环境变量的使用和一些问题2.3 获取环境变量2.4 深入理解环境变量2.5 环境变量相关的命令 3. 进程地址空间3.1 基本概念3.2 为什么要有地址空间 1. 命令行参数 main函数也可以带参数的&#xff0c;如下 #include…

Linux内核之原子操作:atomic_long_dec用法实例(六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

2023-2024年汽车行业报告/方案合集(精选345份)

汽车行业报告/方案&#xff08;精选345份&#xff09; 2023-2024年 来源&#xff1a;2023-2024年汽车行业报告/方案合集&#xff08;精选345份&#xff09; 【以下是资料目录】 2023中国汽车科技50强 2023中国智能汽车产业发展与展望 2023比亚迪海豹汽车拆解报告 2023新能…

PotatoPie 4.0 实验教程(31) —— FPGA实现摄像头图像高斯滤波

什么是高斯滤波 高斯滤波是一种常见的图像处理技术&#xff0c;用于去除图像中的噪声和平滑图像。它的原理基于统计学中的高斯分布&#xff08;也称为正态分布&#xff09;。 在高斯滤波中&#xff0c;一个二维的高斯核函数被用来对图像中的每个像素进行加权平均。这个高斯核…

【沉淀之华】从0到1实现用户推荐 - 实时特征系统构建,包含特征计算,特征存储,特征查询,特征补偿超详细思路分享

文章目录 背景介绍设计初衷基本概念 技术架构"四高"特征存储特征计算特征查询特征补偿 技术难点Q&A彩蛋 背景介绍 设计初衷 作为用户推荐系统的支撑系统之一&#xff1a;用户实时特征系统有着举足轻重的重要&#xff0c;甚至说它是一起推荐行为触发的必要条件。…

【经典算法】LeetCode 160. 相交链表(Java/C/Python3/Go实现含注释说明,Easy)

目录 题目描述思路及实现方式一&#xff1a;哈希表思路代码实现Java版本C语言版本Python3版本Golang版本 复杂度分析 方式二&#xff1a;双指针思路代码实现Java版本C语言版本Python3版本Golang版本 复杂度分析 总结相似题目 标签(题目类型)&#xff1a;链表 题目描述 给你两…