HTTP性能优化

HTTP和TCP/IP的关系

HTTP—>(TSL/SSL)—>TCP—>IP
HTTP处于应用层、TCP处于传输层、IP处于网络层

1、HTTP将所需要传输的数据以流的形式传递给TCP程序

2、TCP解析数据中的IP地址和端口号,将数据流分割成数据段,并添加上TCP段首部,如TCP握手(ACK、SYNC等),源端口,目的端口、TCP校验和等

3、TCP程序将包装好的TCP数据段叫给IP程序,IP程序在此基础上封装进去IP分组首部,如源IP地址、目的IP地址,数据报总长度、分组ID、首部长度、首部校验和等等

4、最红交给数据链路层去发送这个IP分组数据段

TCP性能的考虑

HTTP紧挨着TCP,所以TCP的链接性能考虑直接影响的HTTP事务的性能。

  1. HTTP事务时延

    一次HTTP请求可分为 DNS查询、连接、请求、事务处理、响应、关闭连接。每一步都会产生时延。其中,相对于连接、请求所消耗的时间,事务处理的时间是很短的。

  2. 对HTTP程序员产生影响的时延
    a、TCP握手建立链接
    b、TCP慢启动拥塞控制
    c、数据聚集的Nagle算法
    d、用于捎带确认的TCP延迟确认算法
    e、TIME_WAIT 时延和端口耗尽

  3. HTTP连接处理

3.1 Connection首部真正用途
HTTP允许客户端和源服务器之间存在多个代理服务器或高速缓存服务器,进行HTTP连接通信时,可以将HTTP首部逐跳的经过这些设备。这个时候,怎么在相邻的HTTP应用程序之间的连接应用一些特殊的选项呢?— Connection首部,可以承载3种不同类型的标签,这些标签不会传播到其它连接中去。
a、HTTP首部字段名,列出了只与此连接有关的选项
b、任意标签,用于描述此连接的非标准选项
c、值close,说明操作完成之后需关闭这条持久连接
由于添加Connection首部的其它首部字段,不能随着报文转发出去。因此将逐跳首部放入Connection首部,就可以达到对首部的保护。
例:

HTTP/1.1 200 OK
Cache-control: max-age=3600
Connection: meter,close,bill-my-credit-card
Meter: max-uses=3,max-refuses=6,dont-report

实例说明:不应该转发Meter首部,要应用假想的bill-my-credit-card选项,且本次事务后应关闭持久连接。

3.2 串行事务处理延迟
如果只对HTTP事务进行简单管理,TCP的性能时延可能会叠加起来,包括多次的建立连接和断开连接。

提高HTTP连接性能的四个方法:
3.2.1 并行连接
通过多条TCP连接发起并发的HTTP请求
并行连接从理论上回提高页面的加载速度,因为多个请求同时发出,时延可以重叠起来。
但并行连接并不是一点更快,原因可能是:客户端带宽限制、消耗更多的内存和计算资源。
现代浏览器确实使用并行连接,但会限制连接数在一个较小的值(通常是4),并且服务器可以关闭来自特定客户端的超量连接。

3.2.2 持久连接
重用TCP连接,以消除连接及关闭的时延
重用连接:HTTP/1.1(HTTP/1.0增强版)允许HTTP设备在事务处理结束后将TCP连接保持在打开状态,以便为未来的HTTP请求重用现存的连接。

3.2.2.1 持久连接+并行连接
持久的连接的管理很重要,不小心会累积出大量的空闲连接

3.2.2.2 HTTP/1.0 + Keep-alive连接
Connection: Keep-alive属性出现在1996年HTTP/1.0版本中,当初也是被当做实验型持久连接。

可以用通用首部Keep-Alive属性指定由逗号分隔的选项来调节keep-alive的行为。例:

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

说明:服务器还会为另外5个事务保持连接的打开状态,或者将打开状态保持到连接空闲后2分钟。

Connection属于逐跳首部,只适用于单条传输链路。

现在HTTP/1.1不再需要此属性,默认开启持久连接的。

3.2.2.3 HTTP/1.1 持久连接
HTTP/1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接(persistentconnection)的改进型设计取代了它。

必须显示指定Connection: close才会指定TCP连接在响应后立即关闭。当客户端发送了Connection: close请求首部之后,客户端就无法在那条连接上发送更多请求了。
只有当连接上所有的报文都有正确的、自定义报文长度时,连接才能持久保持。

3.2.3 管道化连接
通过共享的TCP连接发起并发的HTTP请求

HTTP/1.1 允许在持久连接上可选的使用请求管道。在响应到达之前,可以将多条请求放入队列,降低网络回环时间。

注:HTTP客户端不应该用管道化的方式发送会产生副作用的请求(比如POST),因为出错时,无法安全的重试POST这样的非幂请求。

3.2.4 复用的连接
交替传送请求和相应报文(实验阶段)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值