步步走

步步走前端

马上订阅 步步走 RSS 更新: https://bubuzou.com/atom.xml

6 分钟了解 HTTP 发展史

2021年1月5日 09:49

HTTP/0.9

HTTP/0.9 是于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。整体来看,它的实现也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。

完整请求流程

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

HTTP/0.9 请求过程

特点

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

HTTP/1.0

HTTP/0.9 存在许多的问题,比如如下的这些:

  • 只支持 HTML 类型文件,无法传输 JS、CSS、字体、图片和视频等类型的文件;
  • 文件传输格式局限于 ASCII,无法输出其他类型编码的文件;
  • 只有请求行,传输给服务器的信息太少;
  • 只响应请求数据,不能传输额外的数据给浏览器。

所以它已经不能满足当时的需求了,于是乎 HTTP/1.0 来了,它带来了这些:

  • 新增了请求头和请求体,能传输更多的信息给服务器,比如如下请求头字段:Accept 文件类型,Accept-Encoding 压缩格式,Accept-Charset 字符编码格式,Accept-Language 国际化语音:

    1
    2
    3
    4
    Accept: text/html
    Accept-Encoding: gzip, deflate, br
    Accept-Charset: ISO-8859-1,utf-8
    Accept-Language: zh-CN,zh
  • 请求头新增 User-Agent 字段,用于服务器统计客户端信息:

    1
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
  • 新增了响应头,能够告诉浏览器更多的信息,比如 Content-Encoding 表示服务器返回文件的压缩类型,Content-Type 告诉浏览器服务器返回的是什么类型的文件以及使用了什么编码格式:

    1
    2
    Content-Encoding: gzip
    Content-Type: text/html; charset=utf-8
  • 新增响应行状态码,用于告知浏览器当前请求的状态,比如 200 表示请求成功:

    1
    HTTP/1.1 200 OK
  • 新增缓存机制,用来缓存已经下载过的资源,减轻了服务端压力。

在构建请求流程上来看,HTTP/1.0 区别于 HTTP/0.9 最大的区别就是在请求和响应的时候新增了不少字段用于在浏览器和服务器之间通信。

剩余内容已隐藏

查看完整文章以阅读更多