HTTP (无状态、简单可扩展)是浏览器中最重要且使用最多的协议,是一种允许浏览器向服务器获取资源的协议,是浏览器和服务器之间的通信语言。
即将完成使命的HTTP/1
超文本传输协议HTTP/0.9:
- 请求GET/mypage.html
- 响应只有HTML文档
被浏览器推动的HTTP/1.0:
新特性:
①引入了请求头和响应头,以Key-Value的形式保存。
请求头:
期望服务器返回的文件的类型
表示期望服务器采用的文件压缩方式
期望服务器返回的文件的编码方式
期望页面的优先语言
响应头:
服务器采用的压缩方法
服务器返回的文件类型
服务器返回的文件的编码方式
②引入了状态码
通过响应行的方式来通知浏览器
③引入了Cache机制
缓存已经下载过的数据,主要使用 header 里的 If-Modified-Since、Expires 来做为缓存判断的标准
④请求代理
服务器需要统计客户端的基础信息,比如 Windows 和 macOS 的用户数量分别是多少,所以 HTTP/1.0 的请求头中还加入了用户代理的字段。
缝缝补补的HTTP/1.1
新特性:
①增加了持久连接
HTTP/1.0 每进行一次 HTTP 通信,都需要经历建立 TCP 连接、传输 HTTP 数据和断开 TCP 连接三个阶段。开销很大。HTTP/1.1 中增加了持久连接的方法,它的特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持,减少了服务器额外的负担。
持久连接在 HTTP/1.1 中是默认开启的,所以你不需要专门为了持久连接去 HTTP 请求头设置信息,如果要关闭持久连接,可以在 HTTP 请求头中加上Connection: close。引入CDN,并且浏览器对于同一个域名,默认允许同时建立 6 个 TCP 持久连接。
②不成熟的管线化
队头阻塞问题:持久连接虽然能减少 TCP 的建立和断开次数,但是它需要等待前面的请求返回之后,才能进行下一次请求。如果 TCP 通道中的某个请求因为某些原因没有及时返回,那么就会阻塞后面的所有请求。
HTTP/1.1试图通过管线化去解决队头阻塞问题,但这个提议已被废弃,所以队头阻塞问题HTTP/1.1并未解决。
③提供虚拟主机的支持
在 HTTP/1.0 中,每个域名绑定了一个唯一的 IP 地址,因此一个服务器只能支持一个域名。但是随着虚拟主机技术的发展,需要实现在一台物理主机上绑定多个虚拟主机,每个虚拟主机都有自己的单独的域名,这些单独的域名都公用同一个 IP 地址。因此,HTTP/1.1 的请求头中增加了 Host 字段,用来表示当前的域名地址,这样服务