HTTP版本的发展
无状态:浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成后立即断开TCP连接,不跟踪每个客户端也不记录过去的请求
HTTP 0.9(了解)
HTTP 0.9 是最早发布出来的一个版本,于1991年发布。
- 采用纯文本的格式
- 只接受GET一种请求方法
- 只有一个请求行,并没有HTTP请求头和请求体
- 服务端发送完毕,就关闭TCP连接
HTTP1.0
随着浏览器的发展,单纯的HTML已无法满足人们的需求了,因此http/1.0呼之欲出,支持多种类型的文件下载是HTTP/1.0的一个核心诉求
那么该如何支持多种类型的文件下载呢?
- 首先,浏览器要知道服务器返回的是什么类型的数据,然后才能根据不用的数据类型进行对应的处理
- 文件的大小变得越来越大,为了减轻传输负担,服务器会先对数据进行压缩后再传输,所以浏览器需要知道服务器压缩的方法
- 由于需要支持全球范围,所以需要国际化支持,服务器需要对不同地区提供不同的语言版本,所以浏览器需要告诉服务器自己需要什么语言版本的数据
- 由于增加了不同类型的文件,每种文件的编码形式可能存在差异,为了能准确读取文件,浏览器需要知道文件的编码类型
也就是说HTTP/1.0 是通过请求头和响应头来支持多种不同类型的数据。在发起请求时会通过HTTP请求头告诉服务器它期待服务器返回什么类型的文件、采取什么形式的压缩、提供什么语言的文件以及文件的具体编码。
请求头如下:
accept: text/html
accept-encoding: gzip, deflate, br
accept-Charset: ISO-8859-1,utf-8
accept-language: zh-CN,zh
其中第一行表示期望服务器返回html类型的文件,第二行表示期望服务器可以采用gzip、deflate或者br其中的一种压缩方式,第三行表示期望返回的文件编码是UTF-8或者ISO-8859-1,第四行是表示期望⻚面的优先语言是中文。
服务器接收浏览器发送的请求头之后,会根据请求头信息来准备响应数据。但是有时服务器并不支持某些要求,比如浏览器请求的压缩类型是gzip,但是服务器不支持gzip,只支持br压缩,那么这时服务器会通过响应头中的content-encoding字段告诉浏览器最终的压缩类型,也就是说最终浏览器需要根据响应头的信息来处理数据。
总的来说,HTTP1.0最大的特点就是引入了请求头、响应头,很多其它特性都需要根据请求头、响应头来实现。下面我们来看看新增的几个典型的特性:
- 有的请求服务器可能无法处理或者处理出错,这时需要告诉浏览器和服务器最终处理该请求的情况,于是引入了状态码,状态码是通过响应行的方式来通知浏览器的。
- 为了减轻服务器的压力,在HTTP/1.0 中提供了 Cache机制,用来缓存已经下载过的数据
- 服务器需要统计客户端的基础信息,如Windows和macOS的用戶数量分别是多少,所以HTTP/1.0的请求头中还加入了用戶代理的字段。
总结一下:
- 增加了 POST、HEAD等方法
- 增加了请求头和响应头,都是以 Key-Value形式保存的
- 增加了状态码
- 传输的数据不再限于文本
- 默认使用Connection: close
- 无法复用连接、队头阻塞