HTTP是浏览器中最重要且使用最多的协议,是浏览器和服务器之间的通信语言,也是互联网的基石。
HTTP/1.1的进化史:HTTP/0.9 => HTTP/1.0 => HTTP/1.1
超文本传输协议 HTTP/0.9:需求很简单,用于在网络之间传递HTML超文本的内容,因此被称为超文本传输协议。
由于需求很简单,只是用来传输体积很小的HTML文件。所以HTTP/0.9的实现有三个特点:
只有一个请求行,如GET /index.html用来获取index.html,并没有HTTP请求行和请求体
服务器也没有返回头信息。因为服务器并不需要告诉客户端太多信息,只需要返回数据就可以。
返回的文件内容是以ASCII字符流来传输的,因为都是HTML格式的文件。
被浏览器推动的 HTTP/1.0:随着万维网的高速发展,带来了很多新的需求,因此出现了HTTP/1.0。
新的需求包括:JavaScript
CSS
图片
音频、视频
等不同类型的文件。
HTTP/1.0实现的功能有:支持多种类型的文件下载(引入请求头和响应头)
accept: text/html accept-encoding: gzip, deflate, br accept-Charset: ISO-8859-1, utf-8accept-language: zh-CN,zh引入了状态码
为了减轻服务器的压力,提供了Cache机制,用来缓存已经下载过的数据
在请求头中还加入了用户代理,以帮助服务器统计客户端的基础信息
缝缝补补的 HTTP/1.1:HTTP的改进:
改进持久连接
原因:HTTP/1.0每进行一次HTTP通信,都需经历TCP连接、传输HTTP数据和断开TCP连接三个阶段。
问题:由于现在单个页面中的图片文件越来越多,如果在下载每个文件的时候都需要经历建立TCP连接,传输数据和断开连接,这将会增加大量无畏的开销
改进:HTTP/1.1中增加了持久连接的方法,它的特点是在一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有明确断开连接,那么该TCP连接会一直保持。
不成熟的HTTP管线化
HTTP/1.1 中试图通过管线化的技术来解决队头阻塞的问题
提供虚拟主机的支持
HTTP/1.1的请求头中增加了Host字段,用来表示当前的域名地址,这样服务器就可以根据不同的Host值做不同的处理
对动态生成的内容提供了完美支持
HTTP/1.1 通过引入Chunk transfer 机制来解决这个问题,服务器会将数据分割成若干个任意大小的数据块,每个数据块发送时会附上上个数据块的长度,最后使用一个零长度的块作为发送数据完成的标志。这样就提供了对动态内容的支持。
客户端Cookie、安全机制