原文:https://medium.com/platform-engineer/evolution-of-http-69cfe6531ba0
译文:
了解http是如何在真实世界工作的
Disclaimer: This article focuses on explaining some underlying implementation details of HTTP, which will be helpful for readers to better understand my blog article — “Web API Design with HTTP and Websockets”
HTTP / 0.9 – 单行协议
- HTTP的初始版本 – 一种简单的客户端服务器,请求响应和远程协议
- 请求性质:单行(方法+请求文档的路径)
- 支持的方法:
GET
仅限 - 响应类型:仅限超文本
- 连接性质:响应后立即终止
- 没有HTTP标头(不能传输其他内容类型文件),没有状态/错误代码,没有URL,没有版本
$> telnet ashenlive.com 80 (Connection 1 Establishment - TCP Three-Way Handshake) Connected to xxx.xxx.xxx.xxx (Request) GET /my-page.html (Response in hypertext) <HTML> A very simple HTML page </HTML> (Connection 1 Closed - TCP Teardown)
流行的Web服务器(Apache,Nginx)仍支持HTTP / 0/9。尝试打开Telnet会话并访问google.com
HTTP / 1.0 – 拥有扩展性
- 浏览器友好的协议
- 提供的头字段包括有关请求和响应的丰富元数据(HTTP版本号,状态代码,内容类型)
- 回应:不限于超文本(
Content-Type
头文件提供传输纯HTML文件以外的文件的能力 – 例如脚本,样式表,媒体) - 支持的方法:
GET
,HEAD
,POST
- 连接性质:响应后立即终止
(Connection 1 Establishment - TCP Three-Way Handshake) Connected to xxx.xxx.xxx.xxx (Request) GET /my-page.html HTTP/1.0 User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) (Response) HTTP/1.0 200 OK Content-Type: text/html Content-Length: 137582 Expires: Thu, 01 Dec 1997 16:00:00 GMT Last-Modified: Wed, 1 May 1996 12:45:26 GMT Server: Apache 0.84 <HTML> A page with an image <IMG SRC="/myimage.gif"> </HTML> (Connection 1 Closed - TCP Teardown) ------------------------------------------ (Connection 2 Establishment - TCP Three-Way Handshake) Connected to xxx.xxx.xxx.xxx (Request) GET /myimage.gif HTTP/1.0 User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) (Response) HTTP/1.0 200 OK Content-Type: text/gif Content-Length: 137582 Expires: Thu, 01 Dec 1997 16:00:00 GMT Last-Modified: Wed, 1 May 1996 12:45:26 GMT Server: Apache 0.84 [image content] (Connection 2 Closed - TCP Teardown)
HTTP / 0.9和HTTP / 1.0中的主要问题-为每个请求建立新连接
HTTP / 0.9和HTTP / 1.0都需要为每个请求打开一个新连接(并在发送响应后立即关闭它)。每次建立新的连接时,TCP三方握手也应该发生。为了获得更好的性能,减少客户端和服务器之间的这些往返行为至关重要。HTTP / 1.1通过持久连接解决了这个问题。