一、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. HTML5 + WebGL 实现的垃圾分类系统

    前言 垃圾分类,一般是指按一定规定或标准将垃圾分类储存.分类投放和分类搬运,从而转变成公共资源的一系列活动的总称.分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用.垃圾在分类储存阶段属于公众的私 ...

  2. SQL SERVER 数据库中查看文本字段中的数据长度LEN() 函数的使用方法

    SQL LEN() 语法 SELECT LEN(column_name) FROM table_name Id LastName FirstName Address City 1 Adams John ...

  3. 从零开始的vue学习笔记(八)

    前言 今天花一天时间阅读完Vue Router的官方文档的基础部分,简单的做一下总结和记录 Vue Router是什么 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页应用(SP ...

  4. 关于padding被计算在width中问题——box-sizing相关

    目录 盒子模型 与box-sizing有什么关系 我们为什么要开历史的"倒车" bootstrap怎么解决的 控件的box-sizing 注意甄别 前一阵子遇到一个小问题,在同样的 ...

  5. web前端开发自学路线是怎样的?html+css+JavaScript的学习方法?

    不废话,直接干货 学习前端的几个个阶段: 一阶段:html标签.html5新增标签.css样式.css3样式.媒体查询等 二阶段:JavaScript.jQuery.ajax.面向对象.http传输协 ...

  6. 新手入门HTML5开发,你必须先搞懂这6个问题

    凭借着跨平台,实时更新,无需安装,易于分发等众多优点,HTML5受到越来越多企业的青睐.而凭借着入门相对简单的优势,很多人编程初学者都选择学习HTML5.但对于初学者来说,学习HTML5之前,会有很多 ...

  7. 实验吧之【Forms、天网管理系统】

    Forms 原题链接 http://ctf5.shiyanbar.com/10/main.php Form 其实是个提示,代表html表单 F12 查看源码,发现 <input name=&qu ...

  8. Sieve of Eratosthenes时间复杂度的感性证明

    上代码. #include<cstdio> #include<cstdlib> #include<cstring> #define reg register con ...

  9. std::is_same

    两个一样的类型会返回true bool isInt = std::is_same<int, int>::value; //为true std::cout << std::is_ ...

  10. Chrome 浏览器垃圾回收机制与内存泄漏分析

    Chorme 浏览器中的垃圾回收和内存泄漏 垃圾回收 通常情况下,垃圾数据回收分为手动回收和自动回收两种策略. 手动回收策略,何时分配内存.何时销毁内存都是由代码控制的. 自动回收策略,产生的垃圾数据 ...