还在前公司的时候, 公司同事问过我一个问题, 他是搞硬件的, 我是搞软件, 在他眼里我似乎应该对http整个传输协议应该是门清的, 没想到我这个门外汉没有经历过以前的黑暗森林年代, 在高度封装的时代我对具体的细节其实并不大清楚, 虽然知道整体流程脉络, 但是到了最终聊实现过程的时候, 怎么实现keep-alive的请求露怯了。所以问题就在心里扎下了根, 今天就有把这个问题翻出来倒腾倒腾。
HTTP(超文本传输协议)请求是客户端和服务器之间通信的一个关键部分。整个HTTP请求过程可以大致分为以下几个步骤:
- 建立连接:
- 客户端通过网络与服务器建立TCP连接。通常使用HTTP/1.1协议,默认使用80端口(HTTPS则使用443端口)。
- 发送请求行:
- 客户端向服务器发送一个HTTP请求,这个请求包括方法(GET、POST等)、URL(统一资源定位符,包括路径和查询字符串)、HTTP版本(如HTTP/1.1)。
- 发送请求头:
- 客户端发送一系列的请求头信息,这些信息包括客户端的一些信息和请求的属性,比如内容类型、接受类型、认证信息等。
- 发送请求体:
- 对于POST等请求方法,客户端会发送一个请求体,这个体中可以包含POST的数据。
- 服务器处理请求:
- 服务器接