✨哈喽,进来的小伙伴们,你们好耶!✨
🛰️🛰️系列专栏:【JavaEE】
✈️✈️本篇内容:认识HTTP协议、请求。
🚀🚀代码存放仓库github:JavaEE仓库!
⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,星夜启程!
目录
什么是HTTP协议?
http的应用场景有哪些?
什么是协议格式?
如何看到协议格式?
为什么要使用抓包工具?
认识http请求;
http响应;
认识URL;
URL encode/decode;
什么是HTTP协议?
在计算机网络中,网络协议有很多,其中我们学习过的有IP、TCP、UDP等,其中还有一个应用非常广的协议叫做http协议,这也是后端领域以后最常用的协议了。其中http协议处在TCP/IP五层协议栈的应用层,http在传输层是基于tcp的。
应用层协议:很多时候,是程序员自定制的;根据实际的需求场景,来设计协议。
http的应用场景有哪些?
什么是协议格式?
即数据具体是怎么组织的。
我们之前学习过UDP:报头(源端口,目的端口,长度,校验和)+载荷。
那么TCP/IP这三者都属于二进制协议,需要理解二进制的bit位;而http则是一个文本格式的协议,即不需要去理解具体的二进制位,只是理解文本的格式即可,即我们肉眼即可观察明白。
如何看到协议格式?
为什么要使用抓包工具?
首先来认识一下代理的作用:
即请求和响应,都是要路过代理的。
这个时候在代理上,就很容易获取到 请求 和 响应 的详细内容;因此,抓包工具就是一个代理;抓包工具就很容易的能够获取到,传输过程中的网络上的详细数据。
进去fiddler官网之后,我们选择下面图片箭头指向的这个Fiddler Classic;
安装解压打开后是这样的界面,fiddler左侧是一个列表,显示到当前抓到的所有http/HTTPS的数据报;
当我们选择左侧列表的某个条目并且双击进入的时候,右侧会显示这个条目的详细信息;
这个标签页的选项,就表示了当前使用啥样的格式来显示 HTTP 请求;咱们用的最多的就是 Raw 这个选项;
选择 Raw 看到的就是 HTTP 请求数据的本体;选择其他的选项相当于 Fiddler 对数据进行了一些加工 调整了格式;
我们可以点击这里的view in notepad查看原始数据;
结果:
那么有的同学可能会出现以下情况;
这是因为Fiddler 刚安装好的时候,默认没有启用 HTTPS;如果你抓到了 HTTPS 的包,就会出现类似的情况;当下网络上的大部分的网站都是 HTTPS;如果不开启 HTTPS,其实就基本没啥可抓的,所以我们可以允许fiddler启动https;
首先我们打开fiddler,按照下图的箭头依次勾选,然后点击OK;
可能会出现fiddler要求安装xx证书,一定要点是!!
认识http请求;
请求格式:
我们通过fiddler抓包便可以获取到;
注意请求分成四个部分;
1、请求行(首行)包含三个部分
a、http方法:方法大致描述了这个请求的目的,上面那张图片显示的是get方法;即想从服务器获取到某个东西;
b、URL:描述了要访问的网络资源的位置具体在哪;
c、版本号:HTTP/1.1表示当前使用的http的版本是1.1;(1.1是当下的主流版本,还可能是1.0/2/3)
2、请求头(header)包含了很多行
注意这里每一行都是一个键值对;键值对?不就是那个…… 相信大家都已经很熟悉了;那么这里的键值对的数目是不固定的,不同的键值对表示不同的含义;
3、空行
相当于请求头结束的标记!类似于链表的null一样。
4、请求正文(body)不一定有,可选;
Fiddler使用技巧;
我们在使用fiddler的时候,经常看到左侧会抓取很多的包,我们不知道如何选择哪一个是我们需要的,这里教大家一个技巧,我们可以选中左侧的某一行,然后Ctrl+A全选,点电脑上的Del键,把抓包信息全部删除,再去进行我们需要的操作,然后再点击到fiddler这里,即可观察到我们一个操作对应的fiddler抓包信息;
这里我们演示一个gitee登录会触发的抓包情况;
1、首先我们打开gitee的登录界面,点击登录;
2、这时候切到fiddler的界面;
可以看到我们一个登录操作对应的抓包信息;
http响应;
响应格式:
那么我们刚才学习了http的请求操作,这里来认识一下响应;响应大致和http请求的格式差不多,还是以刚才的gitee登录来展示;
step1:抓取gitee登录的信息,首先点击raw,然后点击下面那个按钮,查看具体数据;
step2:打开之后的界面;
对照上面的响应格式,从上到下依次是首行、响应头;空行是响应头的结束标记;空行以下是响应正文。
1、首行,包含了3个部分
a、版本号——http1.1
b、200 状态码,描述了这个响应表示一个成功的还是失败的;这里200表示成功;
c、OK状态码的描述,通过一个/组简单的单词,来描述当前状态码的含义;
2、响应头(header)
也是键值对结构,依然是每个键值对占一行,每个键和值之间使用空格来分割;
3、空行
表示响应头结束的标记;
4、响应正文(body)
服务器返回给客户端的数据,这里的数据可能是不同的格式,最常见的是html形式。
认识URL;
2、可以看到上面一栏里面出现了一大串字符;(这里我给截图下来的方便观察)
a、路径就是 /
b、/ 后面这一大片都是查询字符串;
c、开头的 http/https描述了这个URL路径是给哪个协议来使用的;
URL 总结:
对于 URL 来说,里面的结构看起来比较复杂,其实最重要的,和开发最关系紧密的,主要就是四个部分:1、ip 地址/域名;
2、端口号(常省略);
3、带层次结构的路径;
4、query string 查询字符串;
URL encode/decode;
为什么需要转义?
转义的规则;
那么小伙伴们可能就要问了,这个%2B%2B的在干嘛?骂人嘛?那肯定不是!
这个键值对 %2B%2B 其实就是通过URL encode转义之后得到的结果;字符 + 的ASCII的十六进制的表示就是2B,按照URL encode转义的规则在这个字符前加上%,就是现在这样的 %2B%2B;
OK,今天就到这里啦,关于http的相关知识点我们下篇博客继续阐述,感谢您的一键三连!!