【Spdy协议简介】
一、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协议简介】的更多相关文章
- HTTPS协议简介
一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...
- Fiddler--一、HTTP协议简介
在学习Fiddler之前,最好先学习一下HTTP协议. HTTP协议简介 什么是HTTP协议 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端 ...
- MODBUS-RTU通讯协议简介
MODBUS-RTU通讯协议简介 什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...
- JavaWeb:Web与HTTP协议简介
JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...
- 【转】SPDY协议
SPDY协议 - v3 原文:SPDY Protocol - Draft 3 翻译:邱鹏滔(QQ: 95350530,主页:www.fireflysource.com) 1 概述 HTTP协议的瓶颈在 ...
- CC2540开发板学习笔记(九)—— BLE协议简介
一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...
- HTTP 协议简介
HTTP 协议简介 博客分类: acl开发--HTTP协议篇 网络协议http协议 一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是 ...
- HTTP代理与SPDY协议(转)
原文出处: fqrouter HTTP代理是最经典最常见的代理协议.其用途非常广泛,普遍见于公司内网环境,一般员工都需要给浏览器配置一个HTTP代理才能访问互联网.起初,HTTP代理也用来翻越“功夫网 ...
- OAUTH协议简介
OAUTH协议简介 原文来自:http://blog.csdn.net/hereweare2009/article/details/3968582 分类: Open API2009-03-08 12: ...
随机推荐
- 基于Docker和Golang搭建Web服务器
1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...
- Android 横竖屏切换生命周期
默认情况下,屏幕会旋转并且会重新走生命周期. 1. 屏幕不旋转 在AndroidManifest文件中的对应Activity中配置android:screenOrientation=”landsc ...
- C#中winform中panel重叠无法显示问题
C#中winform中panel重叠无法显示问题: 最近开发一个项目有个需求是需要多个模式来回切换的,本来考虑使用多个窗口来实现这个功能,但是这样做浪费资源,而且工作量大,所以想到使用panel控件来 ...
- spring boot通过Spring Data Redis集成redis
在spring boot中,默认集成的redis是Spring Data Redis,Spring Data Redis针对redis提供了非常方便的操作模版RedisTemplate idea中新建 ...
- RRiBbit,一个事件总线.基于spring配置不同服务通信!
1.何为RRiBbit? *一种开源事件总线技术,能够让模块(组件)之间双向通讯,也被称为请求相应总线(request-response-bus),使用简单,相对其他框架来说,RRiBbit只需要加个 ...
- Podman 使用指南
原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod.Podman 的使用体验和 Docker 类似,不同的是 Podman 没 ...
- Idea项目注释规范设置
Idea项目注释规范设置文档 1.类注释: /** *@ClassName: ${NAME} *@Description: TODO *@Author: guohui *@Da ...
- 初识域渗透利器Empire
Empire 是一款类似Metasploit 的渗透测试框架,基于python 编写,Empire是一个纯粹的PowerShell 后开发代理,建立在密码安全通信和灵活的架构上.Empire 实现了无 ...
- React+Antd+Antd-Img-Crop实现上传固定大小的裁剪头像或者图片(且可控制图片数量)
见章知著 1024,程序员们节日快乐!本文主要讲述react配合antd以及react-img-crop第三方库实现一个可控的图片上传功能. 运行项目 需要具有node环境 第三方库安装 1.antd ...
- std::weak_ptr
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对 ...