从HTTP/0.9到HTTP/2

1、引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HTTP/2 更是让它再次成为技术热点。 作为即时通讯开发者来说,深刻理解HTTP协议有助于在现今复杂移动网络环境下的优化和最佳实践的开展,本文将通俗易懂的地介绍 HTTP 协议的历史演变和设计思路。 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路_1.jpg2、相关文章 《网络编程懒人入门(七):深入浅出,全面理解HTTP协议》《不为人知的网络编程(八):从数据传输层深度解密HTTP》《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》《IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token》《IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理》《从HTTP到MQTT:一个基于位置服务的APP数据通信实践概述》《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解》《让互联网更快:新一代QUIC协议在腾讯的技术实践分享》3、HTTP/0.9 HTTP 是基于 TCP/IP 协议的应用层协议(详见《网络编程懒人入门(一):快速理解网络通信协议(上篇)》、《网络编程懒人入门(二):快速理解网络通信协议(下篇)》)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。 最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET:GET /index.html 上面命令表示,TCP 连接(connection)建立后,客户端向服务器请求(request)网页index.html。 协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式:Hello World 服务器发送完毕,就关闭TCP连接。4、HTTP/1.0 4.1简介 1996年5月,HTTP/1.0 版本发布,内容大大增加(详见 RFC1945)。 首先,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础。 其次,除了GET命令,还引入了POST命令和HEAD命令,丰富了浏览器与服务器的互动手段。 再次,HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。 其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。 4.2请求格式 下面是一个1.0版的HTTP请求的例子:GET / HTTP/1.0User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)Accept: / 可以看到,这个格式与0.9版有很大变化。 第一行是请求命令,必须在尾部添加协议版本(HTTP/1.0)。后面就是多行头信息,描述客户端的情况。 4.3响应格式(Response) 服务器的回应如下:HTTP/1.0…

read more