本文主要分为两个大点,为了理解HTTP协议的工作过程,以及理解HTTP协议的报文格式,要先说一下fiddler抓包工具的基础用法。来帮助更好的明确。
一,抓包工具fiddler
首先抓包工具是什么,为什么要有这个。
在HTTP在网络上传输时,这个抓包工具可以把HTTP传输的数据获取到,并且显示出来。
1.抓包工具推荐
HTTP抓包工具很多,在这边主要推荐fiddler,因为这个是专门用来抓取HTTP的。
还有就是浏览器自带的抓包工具:Network
但自带的这款抓包工具,看着不够直观。
还有一个老牌的一个抓包工具:wireshark
这款功能十分强大,几乎所有的网络协议都可以抓到,但也就是因为太强了,所以门槛很高 ,而且抓HTTP没有优化。
二,fiddler使用
1.下载
直接在浏览器搜索,然后点进去官网下载:Web Debugging Proxy and Troubleshooting Tools|Fiddler (telerik.com)
点击这个图标一路下载就好:
2.使用
下载之后 点开之后能看见一大堆东西,包含了你主机上所有HTTP协议的请求和响应数据:
记住,要关注的是蓝色的,并且body这一行比较大的数据,进去点击raw,右上方是请求的详情,右下方是请求的响应,那个右边中间的是解压缩按钮,底下数据可以看到是二进制的,点击之后手动解压,让你能够看得明白:
二,HTTP协议的基本格式
首先说明,HTTP是一个文本格式的协议,在本质上,一个HTTP数据包,就是按照上述的格式 ,构造出一串文本,写入到tcp socket中。
1.一个HTTP请求报文分为四个部分:
1.首行
首行又包含三个部分:
1)请求的方法:GET
2)请求的URL(也就是网址)
3)版本号:
第一个红色框框就是方法,第二个一大段没有框框的就是URL,第三个红色框框就是版本号。 他们三个是使用空格来隔开的。
2.请求头(header)
这些也就是请求头,本质上是一个键值对,每一行是一个键值对,键和值之间分割,会有一个空行隔开
3.空行
最后一个header后面,类似链表,使用null作为结尾一样。
4.正文
有时候有body,有时候没有正文,这也是你要给浏览器的东西,也就是json传输数据的必要数据
2.一个HTTP响应报文也分为四个部分:
1.响应的首行:
HTTP/1.1 200 OK
1)版本号:HTTP/1.1
2)状态码:200
3)状态码描述:OK
在这边200 OK就是一个成功的响应,出现什么404 Not Found就是一个失败的响应。
2.响应头:
也是有一个空行存在
3.空行
也就是分隔的
4.正文:
正文中放置什么的都可以,有空行也行,但不是隔开的,只有HTTP中第一个空行,才是header结束标记。