《HTTP权威指南》每章的知识点总结
TCP/IP是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集,位于http下层。其实常谈论的http连接实际上就是tcp连接加上一些使用连接的规则,tcp为http提供了一条可靠的比特传输管道。一旦连接建立起来,在客户端和服务器的计算机之间交换的报文就永远不会丢失、受损或失序。
通常http事务发生时会经过几个步骤,下面以访问http://www.xxx.com:80/path/index.html为例说明:
浏览器从地址栏中解析处域名(主机名),也就是拿到www.xxx.com
浏览器根据得到的主机名查询出ip地址,比如算出ip为202.43.78.3,(中间可能经过查找host文件或去查询dns服务器)
浏览器解析出端口(http默认为80,https默认为443)
浏览器发起一条到202.43.78.3端口为80的链接,(重建需要经过几次确定相关参数的来回“握手”)
浏览器发起请求报文
服务器返回响应报文
浏览器关闭连接(其实浏览器和服务器都可以在不通知对方的情况关闭连接)
1. ip分组首部(通常为20字节)
2. tcp段首部 (通常为20字节)
3. tcp数据块 (0个或多个字节,实际http报文数据就在这里)
用一句话描述这个过程就是,http报文流给到tcp,tcp把报文分成一段一段的,然后tcp把每个tcp段交给ip,ip封装成一个ip分组,最后传输的是ip分组。(当然了这里我们忽略了ip下面的数据链路层和物理层)
TCP确定一个连接
首先客户端解析ip地址或者端口号需要时间,如果当前没有访问过相关资源,那么解析还需要查询dns服务器,此操作,造成的时延较多,可能花费数十秒。
建立tcp链接会有建立时延,通常2s左右,如果当前的http事务较多,那么会很快叠加上去。
传输、处理请求报文需要时间
回传响应报文需要时间
当然还有其他因素,比如硬件、网络负载,以及报文尺寸等!
这里简要说明一下,建立tcp链接这个过程可能存在的时延分析,包括:经典三次“握手”、tcp慢启动拥塞控制机制等!
客户端发送携带“SYN”标记的TCP段说明发起连接请求
服务端返回“SYN”和“ACK”的TCP段说明已接受
最后客户端发送确认信息以确认连接
HTTP首部字段名,列出了只与此有关的首部;
任意标签值,用于描述此链接的非标准选项;
值close,说明操作完成之后需关闭这条持久连接。
接收端在收到请求报文之后,对报文进行解析,并查看connection首部中列出的首部列表,并在转发出去之前,删除相关首部,这一行为称为:“对首部的保护”。
此种机制描述了http事务一个一个接着发起,不能同时下载更多的资源,使得界面上用户看不到东西,体验不够好。串行连接没有很好的利用tcp/ip连接的慢启动机制!
优化方法主要有:
并行连接
通过多条TCP连接发起并发的HTTP连接
持久连接
重用TCP连接,以消除连接及关闭时延
管道化连接
通过共享的TCP连接发起并发的HTTP请求
HTTP/1.1允许在持久连接上可选地使用请求管道。这是在keep-alive连接上的进一步性能优化。在响应到达之前,可以将多条请求放入队列。当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条请求也可以开始发送了。在高时延网络条件下,这样做可以降低网络的环回时间,提高性能。
管道连接的限制
略