小草浅浅谈web(二)


本文主要包含:http & web加速




0x01.http 1.0/1.1

http网上讲的很多啦,不外乎就那几点。

先看个http流程图:

http流程

http 1.0, 一个请求开启一次TCP连接。

http 1.0链接方式




http 1.1链接方式

详细的看这里吧: http://blog.csdn.net/forgotaboutgirl/article/details/6936982




0x02.http 2.0

http 2.0将可能引入 SPDY 协议。

SODY协议是由google基于TCP应用层协议,避开HTTP的短连接损耗,同时支持多路复用(利用多stream机制),使得服务端和客户端仅需一个TCP连接即可传输任意内容,大大节省服务器资源,提高网络利用率。同时易于部署,服务端客户端加上SPDY协议的解析即可,对于应用开发人员、应用用户而言不需要任何额外知识。

SPDY有几个新特性:

  • 多路stream

SPDY允许在单一TCP连接上并发无限个stream。由于请求可以在单一通道上交错,TCP的效率高了许多:只需很少的连接,并且网络封包也可以更少更紧凑。

当你打开一个TCP链接,发送请求包,将持续收到stream式数据。




SPDY 连接流




  • HTTP头内容压缩

SPDY允许压缩HTTP请求和响应头,因此可以(比传统HTTP)传输更少的包和数据.




SPDY 压缩




  • 服务器推送流(Server Push)

http 1.0时代,服务器只能被动接受,客户端主动请求,服务器只负责回馈数据。

SPDY在实验服务器通过声明X-Associated-Content头来推送内容。服务端通过这个头告知客户端需要推送资源。




SPDY 连接




  • 与HTTP兼容

HTTP本身是单次请求+单次响应的结构,所以SPDY中使用带有FLAG_FIN的SYN_STREAM来兼容HTTP请求,而带有FLAG_FIN的SYN_REPLY来兼容HTTP响应。对于带有请求body(上传文件)的情况,这时在SYN_STREAM可以不包含FLAG_FIN标识,然后客户端将数据按数据帧的大小限制(最大2^31 – 1)进行拆分,跟随发送若干数据帧,在最后一个数据帧上带有FLAG_FIN即可。对于服务端响应中的大量内容(如HTML页面、JS、CSS等),同样采用类似方法,只在最后一个数据帧带上FLAG_FIN。




SPDY 兼容




0x03.web速度

先看看你点击一个网站产生的数据流。




访问 web数据流




  • 网口转换

  • 数据形式转换

  • 光缆/电缆传输

  • ISP接入

  • 服务器解析

  • 客户端渲染

  • 还有一个重要的: DNS查询


一个web测试网站:http://www.webpagetest.org/

下面对醒来网站的测试:




http://xinglai.org/ 测试

从下面的测试可以看出,访问一个网站耗时的几个东西:

  • 下载一个很大的png

  • DNS查询

  • TCP流初始化时间




关于网络带宽与延迟的测试




网络带宽与延迟

从上面很容易看到,网络带宽不是最主要的问题,网络延迟才是主要问题。

查看你本地的DNS缓存:chrome://dns




本文出自 夏日小草,转载请注明出处:http://homeway.me/2014/06/11/xiaocao-share-web-2/


-by 小草

2014-06-11 21:57:14

Fork me on GitHub