HTTP/1:HTTP性能优化

超文本传输协议 HTTP/0.9

实现过程也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。

  1. HTTP 都是基于 TCP 协议的,所以客户端先要根据 IP 地址、端口和服务器建立TCP 连接,而建立连接的过程就是 TCP 协议三次握手的过程。
  2. 建立好连接之后,会发送一个 GET 请求行的信息,如GET /index.html用来获取index.html。
  3. 服务器接收请求信息之后,读取对应的 HTML 文件,并将数据以 ASCII 字符流返回给客户端。
  4. HTML 文档传输完成后,断开连接。

特点:

  • 第一个是只有一个请求行,并没有 HTTP 请求头和请求体,因为只需要一个请求行就可以完整表达客户端的需求了。
  • 第二个是服务器也没有返回头信息,这是因为服务器端并不需要告诉客户端太多信息,只需要返回数据就可以了。
  • 第三个是返回的文件内容是以 ASCII 字符流来传输的,因为都是 HTML 格式的文件,所以使用 ASCII 字节码来传输是最合适的。

HTTP/1.0

支持多种类型的文件下载是 HTTP/1.0 的一个核心诉求
支持对多种类型文件的下载:
HTTP/1.0 引入了请求头和响应头,它们都是以为 Key-Value 形式保存
的,在 HTTP 发送请求时,会带上请求头信息,服务器返回数据时,会先返回响应头信
息。

通过请求头和响应头要支持多种类型的文件,我们就需要解决以下几个问题。

  • 首先,浏览器需要知道服务器返回的数据是什么类型的,然后浏览器才能根据不同的数据类型做针对性的处理。
  • 其次,由于万维网所支持的应用变得越来越广,所以单个文件的数据量也变得越来越大。为了减轻传输性能,服务器会对数据进行压缩后再传输,所以浏览器需要知道服务器压缩的方法。
  • 再次,由于万维网是支持全球范围的,所以需要提供国际化的支持,服务器需要对不同的地区提供不同的语言版本,这就需要浏览器告诉服务器它想要什么语言版本的⻚面。
  • 最后,由于增加了各种不同类型的文件,而每种文件的编码形式又可能不一样,为了能够准确地读取文件,浏览器需要知道文件的编码类型。

HTTP/1.1

  1. 改进持久连接
    HTTP/1.1 中增加了持久连接的方法,它的特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持。
  2. 不成熟的 HTTP 管线化
    持久连接虽然能减少 TCP 的建立和断开次数,但是它需要等待前面的请求返回之后,才能
    进行下一次请求。如果 TCP 通道中的某个请求因为某些原因没有及时返回,那么就会阻塞后面的所有请求,这就是著名的队头阻塞的问题。
    TTP/1.1 中试图通过管线化的技术来解决队头阻塞的问题。HTTP/1.1 中的管线化是指将多
    个 HTTP 请求整批提交给服务器的技术,虽然可以整批发送请求,不过服务器依然需要根
    据请求顺序来回复浏览器的请求。
  3. 提供虚拟主机的支持
    HTTP/1.1 的请求头中增加了 Host 字段,用来表示当前的域名地址,这样服务器就可以根据不同的 Host 值做不同的处理。
  4. 对动态生成的内容提供了完美支持
    HTTP/1.1 通过引入 Chunk transfer 机制,支持动态接受服务器传输的数据块。最后使用一个零⻓度的块作为发送数据完成的标志。这样就提供了对动态内容的支持。
  5. 客户端 Cookie、安全机制
    除此之外,HTTP/1.1 还引入了客户端 Cookie 机制和安全机制。
此文章为4月Day25学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪

豪猪
4 声望4 粉丝

undefined