HTTP网络通信协议基础

目录

前言:

1.HTTP协议理论

1.1协议概念

1.2工作原理

2.HTTP抓包工具

2.1Fiddler工具

2.2抓包原理

3.HTTP协议格式

3.1HTTP请求

3.2HTTP响应

3.3格式总结


前言:

在了解完网络编程的传输层UDP和TCP通信协议后,就需要开始对数据进行“修饰”,即应用层协议。在应用层中,HTTP协议是最重要、最常用的一个通信协议。

本节主要介绍HTTP协议的基础知识以及Fiddler抓包工具的使用。

序列:HTTP - 001


1.HTTP协议理论

1.1协议概念

 HTTP(全称为“超文本传输协议”)是一种应用非常广泛的应用层协议,目前已经发展成为一种最主流的应用层协议。

所谓“超文本” 的含义,就是传输的内容不仅仅是文本,还可以是一些其他的资源,比如图片、视频和音频等二进制的数据。

HTTP协议往往是基于传输层的TCP协议实现(HTTP1.0、HTTP1.1和HTTP2.0均为TCP,HTTP3基于UDP实现)。

目前我们主要使用的还是HTTP1.1和HTTP2.0版本。

1.2工作原理

 当我们在浏览器中输入一个“网址”,此时浏览器就会给对应的服务器发送一个HTTP请求,对方服务器收到这个请求之后,经过计算处理,就会给主机返回一个HTTP响应。

事实上,当我们访问一个网站的时候,大概率涉及不止一次的HTTP请求/响应的交互过程,为了清楚捕捉到所有的HTTP请求/响应,所以我们要使用“抓包工具”观察到详细的过程。

2.HTTP抓包工具

在了解HTTP协议的格式之前,我们首先要学会和使用“抓包工具”,这在学习和了解HTTP协议时非常重要。

2.1Fiddler工具

 市面上的抓包工具有很多,以其中最好使用的一款Fiddler抓包工具为例。官网下载地址为:Fiddler | Web Debugging Proxy and Troubleshooting Tools

FIddler是一款专门抓取针对http请求/响应的工具,它对于其他的抓包工具而言具有清晰、方便的优点,所以推荐使用Fiddler抓包工具。

安装完成之后Fiddler界面如下:

安转完成之后,依次选择左上角Tools->Options...->HTTPS->勾选全部的内容,操作完成之后就可以抓取主机的所有http请求/响应。

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

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

2.2抓包原理

Fiddler就相当于一个“代理”

  1. 浏览器访问sogou.com时,就会把HTTP请求先发给Fiddler,Fiddler再把请求转发给sogou服务器。
  2. 当sogou服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器,因此Fiddler对于浏览器和sogou服务器之间交互的数据细节,都是非常清楚的。

3.HTTP协议格式

3.1HTTP请求

请求的详细数据,在Fiddler中通过右下角的View in Notepad打开:

请求格式拆解:

  • 首行:[方法]+[url]+[版本号],分别使用空格分隔;
  • 请求头(Header):请求的属性,每个键值对独占一行,冒号+空格来分割键和值
  • 空行:遇到空行表示Header部分结束
  • 正文(Body):空行后面的内容都是Body,Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;

3.2HTTP响应

响应的详细数据,在Fiddler中通过右下角的View in Notepad打开:

响应格式拆解:

  • 首行:[版本号]+[状态码]+[状态码解释],分别使用空格分隔;
  • 响应头(Header):请求的属性,每个键值对独占一行,冒号+空格分割键和值
  • 空行:遇到空行表示Header部分结束
  • 正文(Body):空行后面的内容都是Body,Body允许为空字符串。如果Bodv存在,则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html页面,那么html页面内容就是在body中。

3.3格式总结

HTTP协议请求/响应格式:

请求/响应行、报头和空行必须要有,请求正文部分可有可无。

空行作用:HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有这个空行,就会出现“粘包问题”


以上便是HTTP协议的基本知识和抓包工具Fiddler。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖实操笔记六---缓存商品,购物车功能

苍穹外卖实操笔记六—缓存商品,购物车功能 一.缓存菜品 可以使用redis进行缓存;另外,在实现缓存套餐时可以使用spring cache提高开发效率;   通过缓存数据,降低访问数据库的次数; 使用的缓存逻辑&#…

STM32 STD/HAL库驱动W25Q64模块读写字库数据+OLED0.96显示例程

STM32 STD/HAL库驱动W25Q64 模块读写字库数据OLED0.96显示例程 🎬原创作者对W25Q64保存汉字字库演示: W25Q64保存汉字字库 🎞测试字体显示效果: 📑功能实现说明 利用W25Q64保存汉字字库,OLED显示汉字的时…

opencv mat用法赋值克隆的操作和一些基本属性

//Mat基本结构 (头部 数据部分) //赋值的话 就是修改了指针位置 但还是指向了原来数据 并没创建数据 本质上并没有变 //只有克隆或者拷贝时 它才会真正复制一份数据 //代码实现 //创建方法 - 克隆 //Mat m1 src.clone(); //复制 //Mat m2; //src.copyTo(m2); //赋值法 …

C语言求解猴子分桃子

问题:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的…

DataBinding简易入门

简介 DataBinding是Google在18年推出的数据绑定框架,采用了MVVM模式来降低各模块之间代码的耦合度,使得整体代码逻辑设计更加清晰。众所周知,MVVM类似于MVC,主要目的是为分离View(视图)和Model&#xff08…

渗透专用虚拟机(公开版)

0x01 工具介绍 okfafu渗透虚拟机公开版。解压密码:Mrl64Miku,压缩包大小:15.5G,解压后大小:16.5G。安装的软件已分类并在桌面中体现,也可以使用everything进行查找。包含一些常用的渗透工具以及一些基本工…

如何入门AI Agent?

随着chatgpt问世,大模型已经在加速各行各业的变革,这是我之前对AI Agent行业的粗浅判断。 下面给大家介绍一下如何制作AI Agent,我会用我开发的全赞AI为例子进行简要的介绍,下面是一种工具型AI Agent的框架图 这是一个大量使用工具…

探索海洋世界,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建海洋场景下海洋生物检测识别分析系统

前面的博文中,开发实践过海底相关生物检测识别的项目,对于海洋场景下的海洋生物检测则很少有所涉及,这里本文的主要目的就是想要开发构建基于YOLOv8的海洋场景下的海洋生物检测识别系统。 首先看下实例效果: 简单看下实例数据情况…

解决 postman测试接口报404 Not Found

JDK版本:jdk17 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 问题描述原因分析解决方案 问题描述 当我使用postman测试接口时,报了 404 Not Found 的错误,报错截图如下所示 但我的后端程序中已经定义了该接口,如下所示 …

MySQL-----DCL基础操作

▶ DCL简介 DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问权限。 DCL--管理用户 ▶ 查询用户 use mysql; select * from user; ▶ 创建用户 ▶ 语法 create user 用户名主机名 identified by 密码 设置为在任意主机上访问…

Netty应用(七) 之 Handler Netty服务端编程总结

目录 15.Handler 15.1 handler的分类 15.1.1 按照方向划分 15.1.2 handler的结构 15.2 输入方向ChannelInboundHandlerAdapter 15.2.1 输出方向Handler的顺序 15.2.2 多个输入方向Handler之间的数据传递 15.2.2.1 handler消失了 15.2.2.2 手动编写netty提供的new Strin…

C语言之预处理详解

目录 1. 预定义符号2. #define定义常量3. #define定义宏练习 4. 带有副作用的宏参数5. 宏替换的规则6. 宏函数的对比宏和函数的一个对比 7. #和###运算符##运算符 8. 命名约定9. #undef10. 命令行定义11. 条件编译常见的条件编译 12. 头文件的包含头文件的包含方式库文件包含嵌…