【网络原理】——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转码的情况


相关文章
|
4月前
|
数据采集 算法 数据挖掘
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
随着Web3技术的迅速发展,去中心化应用和智能体在各种领域的应用逐渐增多。MCP(Modularized Control Protocol,模块化控制协议)作为一种增强智能体执行能力的关键技术,为Web3场景中的智能体提供了更强的灵活性和可扩展性。本文将探讨如何利用MCP技术提升智能体在Web3场景中的执行能力,并通过实例代码展示其实现路径。
352 22
|
1月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
2月前
|
存储 网络协议 算法
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
HTTP/2通过HPACK压缩头部冗余信息,提升传输效率;并利用多路复用技术,在单个TCP连接上并行处理多个请求,避免队头阻塞,显著提升性能。同时支持服务器推送和流优先级设置,优化资源加载体验。
140 7
|
2月前
|
运维 架构师 安全
二层协议透明传输:让跨域二层协议“无感穿越”多服务商网络
简介:本文详解二层协议透明传输技术,适用于企业网工、运营商及架构师,解决LLDP/LACP/BPDU跨运营商传输难题,实现端到端协议透传,提升网络韧性与运维效率。
|
5月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
294 61
|
5月前
|
Web App开发 网络协议 应用服务中间件
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
HTTP/2 是 HTTP/1.1 的重要升级,通过多路复用、头部压缩、服务器推送等特性显著提升性能与效率。本文详细解析了 HTTP/2 的优势、配置方法及实际应用,涵盖 Nginx/Apache/IIS 配置、curl 测试工具使用,并对比 HTTP/1.1 指出其优化点。同时提醒需注意 HTTPS 支持、客户端兼容性等问题,助你高效掌握并运用 HTTP/2 技术。
564 5
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
|
5月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
6月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
177 18
|
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
TCP洪水攻击(SYN Flood)的诊断和处理 Posted by  海涛  on 2013 年 7 月 11 日 Tweet1 ​1. SYN Flood介绍 前段时间网站被攻击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。
1144 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
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
846 0

热门文章

最新文章