大萧条时期的野蛮生长——HTTP协议入门

144 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划·4月更文挑战」的第20天,点击查看活动详情

我们好像经常在讨论TCP/IP协议,很多研究很多算法都是围绕TCP传输过程,好像HTTP协议本身几乎就难以提及。甚至有时候会不知道HTTP到底是个什么,概念不清就容易闹笑话,比如我们会问RPC请求走的什么传输,有时候会直接张口回答走http。这就是基本的概念混淆,HTTP是数据格式协议,完全不管传输的事。今天就简要说一下HTTP到底是个什么。

先说概念

首先,HTTP协议规定了客户端与服务端的通信数据格式,属于应用层协议,发生在TCP建连之后,是一个无状态的协议,即两次请求之间完全不存在依赖关系或者关联。

工作过程

下面从用户的一次完整的请求过程来描述HTTP在整个网络请求过程中是怎样的存在。

  1. 用户在浏览器输入域名,回车请求
  2. 浏览器向目标服务器发起TCP建连请求(这里暂时省去DNS解析的流程)
  3. 服务器收到浏览器的请求,通过三次握手与客户端浏览器完成连接
  4. 浏览器将本次请求的数据打包成符合HTTP协议规范的数据包发向服务器
  5. 服务器收到请求的数据包之后,解析数据包,得到本次请求的响应原始数据
  6. 服务器将原始数据也打包成符合HTTP规范的格式通过网络传送至浏览器
  7. 浏览器解析数据包,并显示相关的HTML和数据

数据包长什么样呢?应该都很熟悉了:

请求:

image.png

返回: image.png

所以为什么需要一个HTTP协议呢?HTTP协议主要是给浏览器这样的客户端用的,为了给所有人获得一致的显示体验,需要一个这样的规范来约束浏览器的厂商。其实服务端或者说微服务之间的交互并不需要HTTP协议,直接解析二进制原始数据即可,这也是很多RPC框架的竞争力所在。