一、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. Java-Thread00之多线程知识准备

    ------ ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170014292-1661101986.jpg) ...

  2. c++第一个程序“Hello world!”

    c++第一个程序“Hello world!” 打开编译器(这里以vs2013为例) 单击新建项目 选择Win32 控制台应用程序 点击右下角确定 点击完成  点击解决方案管理器  新建cpp文件  右 ...

  3. 基于Influxdb对InfluxDBResultMapper的一点扩展

    理想很饱满,现实很骨感. 由于业务需要"灵活可配置"的功能需求,在使用java开发Influxdb查询功能的时候,遇到了一个问题,Measurement注解的名称有可能需要动态变化 ...

  4. mac下ip地址重定向

    在终端临时使用最高权限用vim编辑/etc下的hosts文件,若提示Password: 输入开机登录密码并回车: yanguobindeMacBook-Pro:~ yanguobin$ sudo vi ...

  5. COGS 2510. 拯救紫萱学姐

    [题目描述] 其实在开考前半个小时题面并不是这样的. 由于明天要考试,同学们要把抽屉里的书都搬空,书很多而且办了走读不能回寝室的学长一眼就看到了回班撩他的学姐,于是就把学姐当学长用♂了:“帮我把这摞书 ...

  6. 全球首个开放应用模型 OAM 开源 | 云原生生态周报 Vol. 23

    作者 | 临石.元毅.冬岛.衷源.天元 业界要闻 全球首个开放应用模型 OAM 开源 2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon ...

  7. Python3实用编程技巧进阶 ☝☝☝

    Python3实用编程技巧进阶  ☝☝☝ 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等 ...

  8. AWD脚本之批量mysql写shell

    摘之工具包中脚本 需要安装mysqldb.windwos环境直接在https://www.codegood.com/archives/129下载MySQL-python-1.2.3.win-amd64 ...

  9. HTML 元素居中的方法

    网址:http://www.cnblogs.com/asqq/archive/2012/04/09/2438745.html 1. 元素的定位的方法选择 :absolute . 2. 给定元素的宽和高 ...

  10. Spring Boot 入门(七):集成 swagger2

    本片文章是基于前一篇写的,<Spring Boot 入门(六):集成 treetable 和 zTree 实现树形图>,本篇主要介绍了spring boot集成swagger2.关于swa ...