首页 » 记事本 » HTTP权威指南笔记

HTTP权威指南笔记

提高HTTP的连接性能

有几种现存和新兴的方法可以提高HTTP的连接性能。

并行连接

通过多条TCP连接发起并发的HTTP请求。

持久连接

重用TCP连接,以消除连接及关闭时延。

HTTP/1.0+keep-alive连接

实现HTTP/1.0 keep-alive连接的客户端可以通过包含Connection: Keep-Alive首部请求将一条连接保持在打开状态。

Connection: Keep-Alive
Keep-Alive: max=5, timeout=120

HTTP/1.1假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection: close首部。这是与以前的HTTP协议版本很重要的区别,在以前的版本中,keep-alive连接要么是可选的,要么根本就不支持。

管道化连接

通过共享的TCP连接发起并发的HTTP请求。

复用的连接

交替传送请求和响应报文(实验阶段)。

TPC慢启动

TCP数据传输的性能还取决于TCP连接的使用期(age)。TCP连接会随着时间进行自我“调谐”,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐被称为TCP慢启动(slowstart),用于防止因特网的突然过载和拥塞。

Content-Length

Content-Length首部指示出报文实体主体的字节大小,这个大小是包含了所有内容编码的。比如对文本文件进行了gzip压缩的话,Content-Length首部就是压缩后的大小,而不是原始大小。

另外Content-Length首部对于长连接是必不可少的,长连接代表在连接期间会有多个http请求响应在排队,而服务器不能够关闭连接,客户端只能通过Content-Length知道一条报文在哪里结束,下一条报文在哪里开始。除非使用了分块编码Transfer-Encoding: chunked,否则响应头首部必须使用Content-Length首部。

分块编码

分块编码把「报文」分割成若干个大小已知的块,块之间是紧挨着发送的,这样就不需要在发送之前知道整个报文的大小了。(也意味着不需要写回Content-Length首部了)当使用持久连接时,在服务器写主体之前,必须知道它的大小并在Content-Length首部中发送。如果服务器动态创建内容,可能在发送之前无法知道主体大小,分块编码就是为了解决这种情况。服务器把主体逐块发送,说明每一块的大小。服务器再用大小为0的块作为结束块,为下一个响应做准备。

此文章发表在 记事本. 将 固定链接 加入收藏.