文章目录
1 什么是HTTP(超文本传输协议)
HTTP协议是前后端交互的桥梁,在应用层中,很多时候需要我们自定义协议,但是HTTP是典型的应用层协议。
2 应用场景
- 浏览器和服务器的交互(打开网页)大概率都是HTTP协议;
- 手机APP和服务器之间的交互,大概率都是HTTP;
- 服务器之间的相互调用也可以使用HTTP。
在这三种情况下前两者HTTP是主流,最后一个是其中的一种方法。
3 工作过程
当我们在浏览器中输入网址(URL)时,此时浏览器就会给对应的服务器发送HTTP请求,对方服务器收到请求后,经过计算处理,返回一个html页面就是响应。HTTP协议是典型的“一问一答”模型的协议。
4 fiddler用法
由于我们无法直接看到HTTP协议工作中间的具体过程。需要使用抓包工具获取到请求交互的详细情况,浏览器给服务器的请求会经过这个代理程序,进一步分析出请求和响应的结果。
代理还分为两种:一种是正向代理(给客户端提供服务的,和客户端关系紧密),站在服务器的角度,正向代理就是把真正的客户端给隐藏起来了;一种是反向代理(给服务器提供服务的,和服务器关系紧密),站在客户端的角度,反向代理把真实的服务器隐藏起来了。
我们这里使用的抓包工具fiddler分析HTTP协议的工作过程,使用简单功能强大。
- 直接在官网下载经典版(免费的)
- 打开后修改设置使其能够抓包https:tools→options→https→勾选以下四个框框同时 下载“根证书” →ok
5 HTTP报文格式
5.1 HTTP请求格式
HTTP请求是一个文本格式的协议 ,构造一个HTTP请求本质上就是在一个TCP socket中按照以下格式写入数据。
5.1.1 首行
方法+URL+版本号
5.1.2 请求头header
这里是按行组织的键值对,每一行是一个键值对,键和值之间用: 空格分割
5.1.3 空行
一个HTTP请求的header可以有若干个,使用空行作为header的结束标志,类似于链表的null
5.1.4 正文body
有的请求有,有的没有,上面的请求就没有body,我们重新抓取一个有正文的HTTP请求:
5.2 HTTP响应格式
5.2.1 首行
版本号+状态码 状态码用来描述是否成功,后面的ok对状态码进行解释说明
5.2.2 响应报头header
同样也是键值对的结构,和请求的结构一样
5.2.3 空行
作为header的结束标记
5.2.4 正文
正文可以是json数据,也可以是html、css、js、img等
以上就是HTTP请求和响应的基本格式和抓包工具的使用方法,后面我们继续了解HTTP的相关内容。