Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

4,822

协议:SPDY

  • 2013-06-27
  • 暂无评论

SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 。

Google研究SPDY是想优化浏览器和服务器之间的通讯。今天,客户端和服务端都是使用HTTP交流,这个早期的协议是在1996年成为标准的,它到今天被广泛使用,但Google希望HTTP可以快点,快点,再快点,所以SPDY应运而生。

目前:

  • SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。(SPDY 是 Speedy 的昵音,意思是更快)
  • 在性能上对http做了很大的优化(比如它的核心思想就是尽量减少连接个数),而对于http的语义并没有做太大的修改(删除了一些头),基本上还是兼容http。
  • 在 SSL 之上增加一个会话层来实现 SPDY 协议,而 HTTP 的 GET 和 POST 消息格式保持不变,即现有的所有服务端应用均不用做任何修改。

功能:

1 Multiplexed requests

对于一条SPDY连接,并发的发起多少request没有任何限制,其实也就是可以拥有多条stream(接下来会介绍stream).

2 Prioritized requests

提供具有优先级的请求(同一个SPDY 连接)。这个主要是解决了HTTP中的pipeline请求是严格的FIFO的。比如有多个request,如果先到的一个request处理时间比较长,则后面的request会被阻塞住,而在SPDY中,就会优先处理高优先级的stream中的frame(后面会介绍这个)

3 Compressed headers

在SPDY中,头是可以被压缩的。

4 Server pushed streams

Server可以主动的push数据给client,而不需要客户端的request.

对于目前网站开发环境的变革:

目前网页设计制作的过程中,技术人员需要通过多种手段来减少页面的请求次数,并减少数据的传输:CSS Sprites,JS压缩及合并等

这些操作大大增加了网站开发的复杂度,并提高了网站建设的复杂度

但SPDY旨在从协议层改变该现状,这无疑将彻底解放技术人员:前端设计师网络运维

浏览器支持:

Google Chrome和Chromium已经支持SPDY
Mozilla Firefox自11.0开始内嵌支持SPDY,但默认并不使用。从Firefox 13开始默认开启对SPDY的支持。
Opera从12.10开始支持SPDY

 服务器支持:

基本概念:

第一个概念是session,这里的Session也就是代表一条tcp连接。

第二个概念就是frame,frame也就是SPDY中server和client之间交互的数据。 SPDY Framing Layer是在tcp之上的一层,而当client端和server端建立连接之后,他们之间的交互数据就是frame。 SPDY中分为2种类型的frame,分别是control frame 和data frame。而每种frame都有对应的flag.

第三个是Stream的概念,一条tcp连接,可以有多条的Stream,每个stream都有一个stream id.

要注意Stream也是有优先级的。如果一端发送一个设置了FLAG_FIN标记的frame,则这个stream将会成为半关闭的.(也就是不会再发送数据,而只能够接收收据,这个和tcp的半关闭很类似).如果一个发送端发送了带有FLAG_FIN标记的flag,如果它再次发送数据,则将会收到一个RST_STREAM的frame.

要注意,只有synstreamframe(建立一个stream的控制frame)才拥有priority,也就是说在SPDY中优先级只到stream这个级别,只有某个stream中的request会被优先处理,而同一个stream中的frame则类似于http的行为。

从stream我们可以看到相比较于http,SPDY可以很打程度上减少建立的连接的数目,因为每个stream其实就类似于一个虚拟的连接。

最后来看下pushed stream,在SPDY中,server能够发送多个replay给一个request,就是说有时候server能够知道需要发送多个资源给client,此时就需要server push资源给client,而如果没有这个特性,则需要client不断的发多个request来请求多个资源。这样子就极大的RT延迟。

在SPDY中,如果server要push数据给client,则它必须选择一个已经存在的stream id,并且server端必须得设置一个比较高的优先级,以便于客户端能够迅速的发现pushed stream,然后响应它。server端能push的内容必须是客户端能够通过一个get请求所得到的资源(也就是push过来的syn frame必须包含一些头信息)。

官方:

http://www.chromium.org/spdy



back up ↑

无觅相关文章插件,快速提升流量