【JavaEE初阶】HTTP协议(1)

news/2024/11/5 12:26:47 标签: http, 网络, 网络协议

https://i-blog.csdnimg.cn/direct/895fd92f9b9f457caa1c2b3a6d61ba18.jpeg" />

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

HTTP

http%E5%8D%8F%E8%AE%AE%E6%8A%93%E5%8C%85-toc" style="margin-left:40px;">http协议抓包

抓包工具

fiddler的配置 

fidder的用法

HTTP请求 基本格式

首行

请求头(header)

空行

正文(body)

HTTP响应 基本格式

首行

响应头

空行

正文

压缩

URL 唯一资源定位符

url encode 转义字符 

URI 唯一资源标识符


 当我们在浏览器中输⼊⼀个搜狗搜索的"⽹址"(URL)时,浏览器就给搜狗的服务器发送了⼀个HTTP请求,搜狗的服务器返回了⼀个HTTP响应. 这个响应结果被浏览器解析之后,就展⽰成我们看到的⻚⾯内容.(这个过程中浏览器可能会给服务器发送多个HTTP请求,服务器会对应返回多个响应,这些响应⾥就包含了⻚⾯HTML,CSS,JavaScript,图 ⽚,字体等信息).

https://i-blog.csdnimg.cn/direct/5024441e2da749c78bd34c6162c1c1e4.png" width="1200" />

HTTP

http全称为"超文本传输协议",HTTP不仅仅能传输文本,还能传输图片, 音频文件,视频,其他各种数据...广泛应用在日常开发的各个场景中(HTTP是最广泛使用的应用层协议,没有之一)

https://i-blog.csdnimg.cn/direct/eb2e42ffaef64b8ea2f601805eb1d955.png" width="1168" />

目前互联网上见到的HTTP协议,绝大部分都是HTTP/1.1版本(1.1版本已经足够好用了,升级到2.0成本比较高(浏览器/服务器的兼容性),带来的收益有限)

https可以认为是http的升级版,在http之上引入了一个"加密层"(https的安全性更高一些),除了安全性外,https和http完全一样

http协议是一种典型的"一问一答模型"的协议(客户端发一个请求,服务器就返回一个响应,一一对应)

http%E5%8D%8F%E8%AE%AE%E6%8A%93%E5%8C%85" style="background-color:transparent;">http协议抓包

借助抓包工具,观察HTTP请求/响应的详细情况,TCP/UDP也是可以抓包的,日常开发中,很少会抓TCP层次的包,但是抓HTTP的包是比较常见的

抓包:用一个程序,把自己网卡上的数据包获取到,并且解析显示出来

https://i-blog.csdnimg.cn/direct/5335a950dcbe48588de0d6f5425521b6.png" width="1200" />

因此抓包工具对于浏览器和服务器之间交互的数据细节,都是⾮常清楚的.

抓包工具

  • wireshare:功能非常强,可以抓TCP,UDP,IP....当然也能抓HTTP,但是"太重了"
  • chrome/edge开发者工具:自动抓包,但是没法看到HTTP原始报文数据,不适合初学者
  • fiddler:推荐使用,经典的,功能强大的抓包工具

https://i-blog.csdnimg.cn/direct/5dcee0d76f954646b4a7f47869a472ae.png" width="600" />

fiddler的配置 

  1. 确保电脑上退出了其他的代理类软件(如vpn/浏览器插件...),fiddler也是代理,可能会和其他代理冲突,导致不能正常抓包
  2. 开启fiddler的HTTPS功能(一次性操作),因为当前网络上大部分网站都是HTTPS

https://i-blog.csdnimg.cn/direct/1f9e3b79ee314b4bb3db5bda2a27fd0e.png" width="1200" />

fidder的用法

启动fidder后,抓包工作就自动开始了

虽然不进行任何操作,fidder也能抓到很多包(正常情况下,你的电脑上有些软件,可能就在不停的在后台与服务器进行交互)

https://i-blog.csdnimg.cn/direct/c11cf7bcaaf64845a6264e7cd43484b7.png" width="1200" />

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

HTTP请求 基本格式

HTTP是 行文本格式的协议

请求格式包括 首行,请求头,空行,正文 四部分

首行

首行三个部分使用空格分割(响应也是如此)

https://i-blog.csdnimg.cn/direct/2f7a63b6c302492e87a6625457570ae2.png" width="936" />

请求头(header)

第二行开始的若干行,一直到空行结束. 每一行都是一个键值对,键和值之间使用 ":空格" 分隔

HTTP中,请求头里的键值对都是HTTP标准规定的,不同的请求头,都有特殊含义 ,但是标准也允许用户自定义一些请求头

空行

请求头的结束标记 

空行的作用

  • HTTP协议并没有规定报头部分的键值对有多少个.空⾏就相当于是"报头的结束标记",或者是 "报头和正⽂之间的分隔符"
  • HTTP在传输层依赖TCP协议,TCP是⾯向字节流的.如果没有这个空⾏,就会出现"粘包问题".

正文(body)

有的请求头中有body,有的没有. 一般来说,HTTP中,GET往往是不带body,POST 往往是带body

https://i-blog.csdnimg.cn/direct/76600e66470247c7b7b66c1ba8c1056b.png" width="1200" />

HTTP响应 基本格式

 响应格式包括 首行,响应头,空行,正文 四部分

与请求头非常类似​​

首行

https://i-blog.csdnimg.cn/direct/1b739facb1b343b1915ff158a258b169.png" width="637" />

200是一个常见的状态码,表示"成功"

响应头

响应头也是键值对构成,只是有的键值对只出现在请求中,有的出现在响应中,有的两处都出现.

空行

响应头结束标记

正文

正文体现了 服务器给浏览器返回的数据

对于响应来说,正文通常是HTML/CSS/JS/JSON/图片/音频/字体....

响应打开后,看到的是二进制(压缩后的)

https://i-blog.csdnimg.cn/direct/5ee850ae43204a59840201ca4167b14b.png" width="1200" />

压缩

压缩是在二进制的角度上对数据进行重新编码, 在保证信息量的不变下,体积缩小了(体积小了,传输时消耗的带宽就低了)

压缩算法有很多种,设计都比较巧妙.

根据数据特点进行压缩,举个简单例子: aaabbbbbcc=>3a5b2c

URL 唯一资源定位符

URL(Uniform Resource Locator 统⼀资源定位符),俗称"网址"

互联⽹上的每个⽂件都有⼀个唯⼀的URL(用于定位网络上的"资源"(网页,文件,图片....))它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.

URL不是HTTP专属的,很多协议都会用到

https://i-blog.csdnimg.cn/direct/794ec01fac8d405bb0026144e634da83.png" width="1200" />

对于一个URL来说,主要关心其中的四个部分:IP地址(域名),端口号,层次的路径,查询的字符串 

url encode 转义字符 

url中的有些符号有特定含义,像/?@&:...等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.

万一你的query string键值对结构中的值里面包含了一些特殊符号,可能会是url的解析出现问题

转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式

https://i-blog.csdnimg.cn/direct/7204479d942a4e838f97d3b421a1456f.png" width="1200" />

URI 唯一资源标识符

可以简单理解成 URL是URI的一种实现,

实际日常开发中,一般不会刻意区分URL和URI这两个概念


http://www.niftyadmin.cn/n/5739458.html

相关文章

Swift 开发教程系列 - 第1章:Swift 简介与开发环境配置

在开始开发 Swift 应用之前,了解 Swift 语言的背景和设置开发环境非常重要。接下来,我们将逐步介绍 Swift 的基本概念,并带你完成开发环境的安装和项目创建。 1.1 Swift 简介 Swift 是由 Apple 开发的一种现代化编程语言,于 201…

基于python flask的知乎问答文本分析与情感预测系统

摘要 本项目旨在构建一个基于Python Flask框架的知乎问答文本分析与情感预测系统。该系统的主要功能包括从知乎平台获取问答内容、对文本进行自然语言处理、情感分析以及结果的可视化展示。通过这个系统,用户可以方便地输入特定问题,系统将自动抓取相关…

大数据新视界 -- 大数据大厂之优化大数据计算框架 Tez 的实践指南

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

11.Node.js API接口

八、API接口 8.1 json-server工具 1)安装json-server npm i -g json-server2)示例 //students.json {"student":[{"id":1,"name":"sally","age":18,"gender":"女"},{"id":2,&…

基于卷积神经网络的大豆病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 大豆病虫害识别与防治系统,卷积神经网络,resnet50,mobilenet【pytorch框架,python源码】_哔哩哔哩_bilibili (一)简介 基于卷…

Android 解决MTK相机前摄镜像问题

很莫名其妙的,前摄默认镜像,原来是为了前摄拍字体正确显示,比如自拍,前摄拍摄的人像虽左右镜像了,但如果后面有字牌显示,字体会显示正常而不是翻转。但现在需求是满足普遍的前摄原生代码不带镜像修改&#…

离散无记忆信道

目录 离散无记忆信道输入概率输出概率联合分布概率信道逆向概率一些记号示例1示例2 离散无记忆信道 离散:输入输出字母表都是有限的 无记忆:输出字符 d i d_i di​ 被接收到的概率只依赖于当前的输入 c i c_i ci​, 而与前面的输入无关。 一个离散无记…

goland 项目GORM 中dao.db.Find 和 dao.db.Model 有什么区别?

序言: 我们在初次学习goLand是可能会遇到查询数据分页,在分页过程会计算查询出来的条数。这个过程会用到dao.db.Find 和 dao.db.Model,那么他们之间到底啥关系要怎么使用呢? 目录 一、dao.db.Find 二、dao.db.Model 三、运用 …