一、SPDY协议诞生记

  SPDY (SPDY 是 Speedy 的昵音,意思是更快)是 Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,那么为什么要搞一个SPDY出来呢?距离万维网之父蒂姆·伯纳斯-李1999年发明并推动 HTTP 成为如今互联网最流行的协议已经过去十几年了(现用 HTTP 1.1 规范也停滞了 13 年了),随着现在 WEB 技术的飞速发展尤其是 HTML5 的不断演进,包括 WebSockets 协议的出现以及当前网络环境的改变、传输内容的变化,当初的 HTTP 规范已经逐渐无法满足人们的需要了。HTTP 需要进一步发展,因此 HTTPbis 工作组已经被组建并被授权考虑 HTTP 2.0 ,希望能解决掉目前 HTTP 所带来的诸多限制。而 SPDY 正是 Google 在 HTTP 即将从 1.1 跨越到 2.0 之际推出的试图成为下一代互联网通信的协议,在今年的2月份,Google终于取得了成功,SPDY被认定作为HTTP2.0的基础。Google也将从2016年开始弃用SPDY,转而支持Http2.0。

二、SPDY解决的问题

SPDY急于解决的问题的很大部分实际上也就是传统的HTTP协议的不足,主要体现在以下几个方面:

1. 每个HTTP连接在同一个时间只能响应一个资源请求。即便是有类似Keep Alive的帮助,但是从逻辑上仍然只是一个FIFO队列,不能够异步响应。

2. 仅能从客户端发起请求。在传统的HTTP协议中,每一个HTTP请求都是从浏览器端发起的,即便是服务器知道浏览器端此时需要某个资源,也必须要通过浏览器端的发起来完成整个交互过程。

3. 响应头的冗余与未压缩。目前HTTP请求头的标准大小从200字节到2KB。Web应用中带大量的cookie表示应用的各种状态的请求头也是很常见的,而在传统的HTTP协议中,HTTP头都是明文未压缩的,这块的带宽浪费也是显而易见的问题。其次,单条链路重复的HTTP头信息(比如HOST, PROXY等等),也实际上是一种带宽的浪费,这部分的某些信息实际上发送一次以后就无需再发送了。

SPDY的出现也解决了以上的几个问题,同时也提出了以下几个目标:

1. 允许多个并发的HTTP请求运行在一个单独的TCP会话中。

2. 为了减少带宽,使用HTTP压缩头和消除不必要的头。

3. 要定义一个很容易实现且提高服务器效率协议。

4. 为了使SSL底层的传输协议更好地提高与现有网络基础设施的安全性和兼容性。

5. 为了使服务器启动与客户端的通信时,尽可能将数据推送到客户端。

三、SPDY协议的原理

简单来说SPDY是SSL之上添加一个会话层,允许多个并发交错流过一个单一的TCP连接。传统的HTTP GET和POST消息格式保持不变,但中SPDY会指定一个新的帧格式进行编码和通过线路传输的数据。

SPDY的framing layer(session),运行可靠的传输层(如TCP)之上。客户端的TCP连接发起方。SPDY的连接是永久性连接。为了获得最佳性能,客户端将无法关闭打开的连接,直到用户浏览所有网页引用的连接,直到服务器关闭连接。服务器被鼓励保留打开的连接,只要可能,但如有必要,可以终止空闲连接。正是因为这个特性,服务器完全有能力push数据信息到浏览器端,当两个端点关闭传输层的连接,它必须首先发送一个GOAWAY的frame,如果请求结束前完成,这样才能使端点能够可靠地确定。

在SPDY协议有几个概念是比较重要的:

1. session--会话,一个SPDY会话实质上就是一个TCP连接;

2. stream--虚拟流,一个SPDY会话可以拥有多条虚拟流,每条流都有标识其身份的流ID,所有的请求和应答都是通过流进行的;

3. frame--SPDY帧,在SPDY协议中,客户端和服务器交互的数据就是SPDY帧,SPDY帧可以分为控制帧和数据帧,数据帧和控制帧通过帧的第一个比特位进行区分,帧的具体结构这里就不分析了,有兴趣的同学可以去查看google发布的SPDY草案。

(备注,本文部分内容是从http://cube.qq.com/?p=346 得来的)

【Spdy协议简介】的更多相关文章

  1. HTTPS协议简介

    一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...

  2. Fiddler--一、HTTP协议简介

    在学习Fiddler之前,最好先学习一下HTTP协议. HTTP协议简介 什么是HTTP协议 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端 ...

  3. MODBUS-RTU通讯协议简介

    MODBUS-RTU通讯协议简介   什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...

  4. JavaWeb:Web与HTTP协议简介

    JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...

  5. 【转】SPDY协议

    SPDY协议 - v3 原文:SPDY Protocol - Draft 3 翻译:邱鹏滔(QQ: 95350530,主页:www.fireflysource.com) 1 概述 HTTP协议的瓶颈在 ...

  6. CC2540开发板学习笔记(九)—— BLE协议简介

    一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...

  7. HTTP 协议简介

    HTTP 协议简介 博客分类: acl开发--HTTP协议篇 网络协议http协议  一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是 ...

  8. HTTP代理与SPDY协议(转)

    原文出处: fqrouter HTTP代理是最经典最常见的代理协议.其用途非常广泛,普遍见于公司内网环境,一般员工都需要给浏览器配置一个HTTP代理才能访问互联网.起初,HTTP代理也用来翻越“功夫网 ...

  9. OAUTH协议简介

    OAUTH协议简介 原文来自:http://blog.csdn.net/hereweare2009/article/details/3968582 分类: Open API2009-03-08 12: ...

随机推荐

  1. 如何选择一款适合自己操作系统、Windows、Mac还是Linux?

    如何选择一款适合自己操作系统.Windows.Mac还是Linux? 作者:我们都很努力着 简介:电脑已经逐渐离不开我们生活,但是如何选择一个我们最佳,最适合的电脑操作系统就成了一些困难选择人士的一个 ...

  2. iOS 设备数据管理工具 iMazing v2.10.3 绿色便携版

    iMazing 是一款可以帮助用户管理 iOS 设备的软件,功能远远超出 iTunes.iMazing 连接你的 iOS 设备(iPhone. iPad 或 iPod)相连,使用起来也非常的方便.你可 ...

  3. 为什么一个Http Header中的空格会被骇客利用 - HTTP request smuggling

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  4. centos7版本以上root密码破解

    centos7版本以上root密码破解 主讲内容: 1.centos7版本以上root密码破解   一.centos7版本以上root密码破解 重启服务器,按键盘的方向键(上 下) 按e 进入紧急救援 ...

  5. Cocos Creator 通用框架设计 —— 资源管理

    如果你想使用Cocos Creator制作一些规模稍大的游戏,那么资源管理是必须解决的问题,随着游戏的进行,你可能会发现游戏的内存占用只升不降,哪怕你当前只用到了极少的资源,并且有使用cc.loade ...

  6. idea 添加 注释 配置

    为类添加自动注释模版 File-->Settings-->Editor-->File and Code Templates 启用该模板才有效一定要勾上 /** * @author : ...

  7. [CF467D] Fedor and Essay

    After you had helped Fedor to find friends in the «Call of Soldiers 3» game, he stopped studying com ...

  8. 分布式FastDFS集群部署

    FastDFS FastDFS的作者余庆在其 GitHub 上是这样描述的:"FastDFS is an open source high performance distributed f ...

  9. java集合之ArrayList链表基础

    ArrayList可变数组 : arrayList继承AbstractList抽象类,实现list接口,底层基于数组实现.可存放null,除了非同步的之外,大致等同Vector.适用快速访问,复制.序 ...

  10. 【Spring Cloud】全家桶介绍(一)

    一.微服务架构 1.微服务架构简介 1.1.分布式:不同的功能模块部署在不同的服务器上,减轻网站高并发带来的压力. 1.2.集群:多台服务器上部署相同应用构成一个集群,通过负载均衡共同向外提供服务. ...