一起养成写作习惯!这是我参与「掘金日新计划·4月更文挑战」的第20天,点击查看活动详情。
我们好像经常在讨论TCP/IP协议,很多研究很多算法都是围绕TCP传输过程,好像HTTP协议本身几乎就难以提及。甚至有时候会不知道HTTP到底是个什么,概念不清就容易闹笑话,比如我们会问RPC请求走的什么传输,有时候会直接张口回答走http。这就是基本的概念混淆,HTTP是数据格式协议,完全不管传输的事。今天就简要说一下HTTP到底是个什么。
先说概念
首先,HTTP协议规定了客户端与服务端的通信数据格式,属于应用层协议,发生在TCP建连之后,是一个无状态的协议,即两次请求之间完全不存在依赖关系或者关联。
工作过程
下面从用户的一次完整的请求过程来描述HTTP在整个网络请求过程中是怎样的存在。
- 用户在浏览器输入域名,回车请求
- 浏览器向目标服务器发起TCP建连请求(这里暂时省去DNS解析的流程)
- 服务器收到浏览器的请求,通过三次握手与客户端浏览器完成连接
- 浏览器将本次请求的数据打包成符合HTTP协议规范的数据包发向服务器
- 服务器收到请求的数据包之后,解析数据包,得到本次请求的响应原始数据
- 服务器将原始数据也打包成符合HTTP规范的格式通过网络传送至浏览器
- 浏览器解析数据包,并显示相关的HTML和数据
数据包长什么样呢?应该都很熟悉了:
请求:
返回:
所以为什么需要一个HTTP协议呢?HTTP协议主要是给浏览器这样的客户端用的,为了给所有人获得一致的显示体验,需要一个这样的规范来约束浏览器的厂商。其实服务端或者说微服务之间的交互并不需要HTTP协议,直接解析二进制原始数据即可,这也是很多RPC框架的竞争力所在。