HTTP 报文
书接上文,HTTP 报文是由一行一行的简单纯文本字符串组成,从 Web 客户端发往务器的 HTTP 报文称为请求报文,相对的,从服务器发往客户端的报文称为响应报文:
请求报文和响应报文的格式类似,都由三部分组成:
下面我们以 Laravel首页为例来看一个简单的报文实例:
关于起始行和首部字段的含义和使用,后面我们会详细展开,这里只需要有一个大体的认识即可。
HTTP 连接的建立
HTTP 基于 TCP 协议进行可靠的数据传输:
HTTP 协议是一个应用层协议,它无需关心操作网络通信的具体细节,而是把联网的细节都交给了底层的 TCP/IP 协议。在 HTTP 客户端向服务器发送报文之前,需要通过网络层的 IP 地址和传输层的端口号建立起一条 TCP/IP 连接。IP 地址和端口号可以从请求 URL 中获取,IP 地址通过 DNS 查询域名获取,端口号不写的话默认是 80:
具体连接建立步骤如下:
HTTP 协议版本变迁
1)HTTP/0.9
HTTP 于 1990 年问世,那时的 HTTP 并没有作为正式的标准被建立,这个版本的 HTTP 其实含有 HTTP 1.0 之前版本的意思,所以被称为 HTTP/0.9。
2)HTTP/1.0
HTTP 正式作为标准被公布是在 1996 年 5 月,版本被正式命名为 HTTP/1.0,并记载于 RFC 1945。
3)HTTP/1.1
1997 年 1 月份公布的 HTTP/1.1 是目前主流的 HTTP 协议版本,当初的标准是 RFC 2068,之后发布的修订版 RFC 2616 就是当前的最新版本。
HTTP/1.0 每次请求都会建立连接,返回响应后断开连接,而 HTTP/1.1 可以在一条连接上处理多个请求,从而提升了性能。
4)HTTP-NG(又名 HTTP/2.0)
重点关注的是 HTTP 性能的大幅优化,以及更加强大的服务逻辑远程执行框架。后面我们在聊 HTTP/2.0 的时候会详细介绍。