目录
一、HTTP协议是什么
HTTP(全称“超文本传输协议”)是一种应用非常广泛的 应用层协议
HTTP协议往往是基于传输层TCP协议实现的,我们平时打开的网站都是通过HTTP协议来传输数据的。
二、理解 HTTP 协议的工作过程
当我们在浏览器中输入一个 "网址",此时浏览器就会给对应的服务器发送一个 HTTP 请求。对方服务器收到这个请求之后,经过计算处理,就会返回一个 HTTP 响应。
事实上,当我们访问一个网站的时候,可能涉及不止一次的 HTTP 请求/响应 的交互过程。可以通过浏览器的开发者工具观察到这个详细的过程。
通过 F12 打开浏览器的开发者工具,切换到 Network 标签页。然后刷新页面即可看到如下图效果。每一条记录都是一次 HTTP 请求/响应
三、HTTP协议格式
3.1 抓包工具的使用
为了详细的观察HTTP协议格式,这里推荐使用抓包工具Fiddler来分析HTTP请求/响应的细节,在官网中进行下载。Fiddler官方下载地址 选择经典版(不收费的版本)下载完成之后一路next。
将Fiddler下载完成之后还需要配置一些工具,才能开始抓包,因为现在的浏览器大部分都是通过https进行传输的。
完成上述操作就可以直接开始抓包了,下面以搜狗网页为例展示抓包的结果(打开Fiddler,访问搜狗主页就可以自动抓包了)
如果页面的抓包过多影响观察,可以选择其中的一个然后ctrl+a选中全部的delete就行了
3.2 抓包结果
以下是搜狗HTTP 请求/响应 的抓包结果
- 首行: [方法] + [url] + [版本]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
HTTP响应
- 首行: [版本号] + [状态码] + [状态码解释]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.
协议格式总结
对于HTTP报文中存在 “空行”:这相当于是“报文的结束标记”,HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有空行的话就会产生“粘包问题”。