SPDY: An experimental protocol for a faster web HTTP/2
http://www.chromium.org/spdy/spdy-whitepaper
https://en.wikipedia.org/wiki/SPDY
| Internet protocol suite |
|---|
| Application layer |
| Transport layer |
| Internet layer |
| Link layer |
SPDY (pronounced "speedy")[1] is a deprecated open-specification networking protocol that was developed primarily at Google for transporting web content.[1] SPDY manipulates HTTP traffic, with particular goals of reducing web page load latency and improving web security. SPDY achieves reduced latency through compression, multiplexing, and prioritization,[1] although this depends on a combination of network and website deployment conditions.[2][3][4] The name "SPDY" is a trademark[5] of Google and is not an acronym.[6]
Throughout the process, the core developers of SPDY have been involved in the development of HTTP/2, including both Mike Belshe and Roberto Peon. In February 2015, Google announced that following the recent final ratification of the HTTP/2 standard, support for SPDY would be deprecated, and that support for SPDY would be withdrawn.[7] Google removed SPDY support in Google Chrome 51. Mozilla removed it in Firefox 50.[8]
Contents
History[edit]
As of July 2012, the group developing SPDY stated publicly that it was working toward standardisation (available as an Internet Draft).[9] The first draft of HTTP/2 used SPDY as the working base for its specification draft and editing.[10]
Implementations of SPDY exist in Chromium,[11] Mozilla Firefox,[12] Opera,[13] Amazon Silk, Internet Explorer,[14] and Safari,[15] with the implementations for Chromium and Firefox being open source software.
In February 2015, Google announced its plans to remove support for SPDY in favor of HTTP/2. HTTP/2 was first discussed when it became apparent that SPDY was gaining traction with implementers (like Mozilla and nginx), and was showing significant improvements over HTTP/1.x. After a call for proposals and a selection process, SPDY/2 was chosen as the basis for HTTP/2. Since then, there have been a number of changes, based on discussion in the Working Group and feedback from implementers.[16]
On February 11, 2016, Google announced that Chrome would no longer support SPDY and NPN after May 15, 2016, the anniversary of RFC 7540.[17]
Design[edit]
The goal of SPDY is to reduce web page load time.[18] This is achieved by prioritizing and multiplexing the transfer of web page subresources so that only one connection per client is required.[1][19]TLS encryption is nearly ubiquitous in SPDY implementations, and transmission headers are gzip- or DEFLATE-compressed by design[20] (in contrast to HTTP, where the headers are sent as human-readable text). Moreover, servers may hint or even push content instead of awaiting individual requests for each resource of a web page.[21]
SPDY requires the use of SSL/TLS (with TLS extension ALPN) for security but it also supports operation over plain TCP. The requirement for SSL is for security and to avoid incompatibility when communication is across a proxy.
Relation to HTTP[edit]
SPDY does not replace HTTP; it modifies the way HTTP requests and responses are sent over the wire.[1] This means that all existing server-side applications can be used without modification if a SPDY-compatible translation layer is put in place.
SPDY is effectively a tunnel for the HTTP and HTTPS protocols. When sent over SPDY, HTTP requests are processed, tokenized, simplified and compressed. For example, each SPDY endpoint keeps track of which headers have been sent in past requests and can avoid resending the headers that have not changed; those that must be sent are compressed.
The IETF working group for HTTPbis has released the draft of HTTP/2.[22] SPDY (draft-mbelshe-httpbis-spdy-00) was chosen as the starting point.[23][24]
Protocol support[edit]
|
|
This section needs to be updated. Please update this article to reflect recent events or newly available information. (December 2015)
|
For use within HTTPS, SPDY needs the TLS extension Next Protocol Negotiation (NPN),[25] thus browser and server support depends on the HTTPS library.
OpenSSL 1.0.1 or greater introduces NPN.[26] Patches to add NPN support have also been written for NSS and TLSLite.[27]
SPDY is scheduled to switch from NPN to Application-Layer Protocol Negotiation (ALPN) before the end of 2014.[28]
Security Support Provider Interface (SSPI) from Microsoft have not implemented the NPN extension to its TLS implementation. This has prevented SPDY inclusion in the latest .NET Framework versions. Since SPDY specification is being refined and HTTP/2 is expected to include SPDY implementation one could expect Microsoft to release support after HTTP/2 is finalized.
Protocol versions[edit]
SPDY is a versioned protocol. In its control frames there are 15 dedicated bits to indicate the version of the session protocol.[citation needed]
- Version 1: version 1 of the SPDY protocol is not used anymore.[29]
- Version 2: soon to be discontinued. Nginx supports SPDY/2 in versions prior to 1.5.10.[30] Firefox 28 and recent versions of Chrome drop support for it.[31][32] OpenLiteSpeed 1.1 and up support SPDY/2.[33]
- Version 3: SPDY v3 introduced support for flow control, updated the compression dictionary, and removed wasted space from certain frames, along with other minor bug fixes.[20]Firefox supports SPDY v3 in Firefox 15.[34] OpenLiteSpeed 1.1 and up support SPDY/3.[33]
- Version 3.1: SPDY v3.1 introduced support for session-layer flow control, and removed the CREDENTIALS frame (and associated error codes).[35] Firefox 27 has added SPDY 3.1 support.[36] OpenLiteSpeed 1.2.7 introduces SPDY/3.1 support.[37] Nginx 1.5.10 supports SPDY/3.1.[38] F5 BIGIP 11.6 supports SPDY/3.1.[39]
- Version 4.0: SPDY v4 alpha3 is more closely aligned with the HTTP/2 draft; it has a new stream flow control and error codes unified with the HTTP/2 draft.[40]
Client (browser) support and usage[edit]
- Google Chrome/Chromium.[41][42] SPDY sessions in Chrome can be inspected via the URI:
chrome://net-internals/#events&q=type:SPDY_SESSION%20is:active. There is a command-line switch for Google Chrome (--enable-websocket-over-spdy) which enables an early, experimental implementation of WebSocket over SPDY.[43] SPDY protocol functionality can be (de)activated by toggling "Enable SPDY/4" setting on localchrome://flagspage. Chromium is expected to remove support for SPDY and Next Protocol Negotiation in early 2016, in favor of HTTP/2 and ALPN.[44] Starting with version 40.x in Feb 2015 Chrome has already dropped support for SPDY/3 and only supports SPDY/3.1 going forward. This has caused Apache websites to be without SPDY support when visited from Google Chrome.[45] - Firefox supports SPDY 2 from version 11, and default-enabled since 13 and later. (Also SeaMonkey version 2.8+.) SPDY protocol functionality can be (de)activated by toggling the
network.http.spdy.enabledvariable inabout:config.[12] Firefox 15 added support for SPDY 3.[34] Firefox 27 has added SPDY 3.1 support.[36] Firefox 28 has removed support of SPDY 2.[31]about:networking(or the HTTP/2 and SPDY indicator add-on)[46] shows if a website uses SPDY. - Opera browser added support for SPDY as of version 12.10.[47]
- Internet Explorer 11 added support for SPDY version 3,[48][49] but not for the Windows 7 version.[50] A problem experienced by some users of Windows 8.1 and Internet Explorer 11 is that on initial loading, Google says "Page not found" but on reloading, it is fine. One fix for this is to disable SPDY/3 in Internet Options > Advanced.[51] After version 11, IE will drop the support of SPDY, as it will adopt HTTP/2.[52]
- Amazon's Silk browser for the Kindle Fire uses the SPDY protocol to communicate with their EC2 service for Web pages rendering.[53]
- Safari 8 and third-party applications in OS X 10.10 and iOS 8 adds support for SPDY 2, 3 and 3.1.[54]
Server support and usage[edit]
As of July 2016, approximately 7.1% of all websites support SPDY.[55] Fielded versions of the two most popular web servers, NGINX and Apache,[56] are the major providers of SPDY traffic.[57] although the latest version of NGINX has now removed SPDY support.[58] This compares with an adoption rate of 8.1% for the newer HTTP/2 protocol, which as of 2016 had overtaken the adoption of SPDY.[59]
Some Google services (e.g. Google search, Gmail, and other SSL-enabled services) use SPDY when available.[60] Google's ads are also served from SPDY-enabled servers.[61]
A brief history of SPDY support amongst major web players:
- In November, 2009, Google announced SPDY as an internal project to increase the speed of the web.[62]
- In September, 2010, Google releases SPDY in Chrome for all versions of Chrome 6.[63]
- In January, 2011, Google deployed SPDY across all Google services.[64]
- In March 2012, Twitter enabled SPDY on its servers, at the time making it the second largest site known to deploy SPDY.[65]
- In March 2012, the open source Jetty Web Server announced support for SPDY in version 7.6.2 and 8.1.2,[66] while other open source projects were working on implementing support for SPDY, like node.js,[67][68] Apache (mod_spdy),[69] curl,[70] and nginx.[71]
- In April 2012 Google started providing SPDY packages for Apache servers which led some smaller websites to provide SPDY support.[72]
- In May 2012 F5 Networks announced support for SPDY in its BIG-IP application delivery controllers.[73]
- In June 2012 NGINX, Inc. announced support for SPDY in the open source web server Nginx.[74]
- In July 2012 Facebook announced implementation plans for SPDY.[75] By March 2013 SPDY was implemented by some of their public web servers.[76]
- In August 2012 WordPress.com announced support for SPDY (using nginx) across all their hosted blogs.[77]
- In June 2013, LiteSpeed Technologies announced support for SPDY/2 and SPDY/3 on OpenLiteSpeed, their open source HTTP server.[33] Support for SPDY/3.1 was announced November 2013.[37]
- In January 2014, Synology announced SPDY is included in the new DSM 5.0.[78]
- In February 2014, CloudFlare using nginx announced automatic support for SPDY v3.1 for all customers with SSL/TLS certificates.[79]
- In May 2014, MaxCDN using nginx announced support for SPDY v3.1 via customers' Pull Zone settings and their API.[80]
- In October 2014, Yahoo shows support of SPDY on the Yahoo Homepage — www.yahoo.com [81]
- In September 2015, the latest version of the Nginx web server dropped SPDY support in favour of HTTP/2[58]
- In May 2016, CloudFlare releases patches to Nginx web server, the patches supports HTTP/2 and SPDY simultaneously.[82]
According to W3Techs, as of July 2016, most SPDY-enabled websites use nginx, with the LiteSpeed web server coming second.[57]
SPDY: An experimental protocol for a faster web HTTP/2的更多相关文章
- Nginx介绍
原文:http://www.aosabook.org/en/nginx.html 作者: Andrew Alexeev nginx(发音"engine x")是俄罗斯软件工程师Ig ...
- nginx---reference
nginx (pronounced "engine x") is a free open source web server written by Igor Sysoev, a R ...
- nginx介绍(三) 配置篇
3. nginx配置 nginx配置系统受益于Igor Sysoev(nginx创始人)在Apache(阿帕奇软件基金会)的经历.Igor Sysoev洞察出可扩展的配置系统对于一个web服务器来说是 ...
- nginx架构与基础概念
1 Nginx架构 Nginx 高性能,与其架构有关. Nginx架构: nginx运行时,在unix系统中以daemon形式在后台运行,后台进程包含一个master进程和多个worker ...
- TCP/IP、HTTP、HTTPS、HTTP2.0
TCP/IP.HTTP.HTTPS.HTTP2.0 HTTP,全称超文本传输协议(HTTP,HyperText Transfer Protocol),是一个客户端和服务器端请求和应答的标准(TCP), ...
- HTTP 2.0 原理详细分析
HTTP 2.0是在SPDY(An experimental protocol for a faster web, The Chromium Projects)基础上形成的下一代互联网通信协议.HTT ...
- 三万长文50+趣图带你领悟web编程的内功心法:一文带你深入解读HTTP的发展史
看到题目,大家是不是认为根据上一篇(两万字长文50+张趣图带你领悟网络编程的内功心法)一样,其实不然,我们上一边介绍的是网络编程的基本功,有了这些基本功之后,我们就可以在此之上构建更加接近实际应用的w ...
- 在ASP.NET Web API中使用OData
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
- 【特别推荐】Web 开发人员必备的经典 HTML5 教程
对于我来说,Web 前端开发是最酷的职业之一,因为你可以用新的技术发挥,创造出一些惊人的东西.唯一的问题是,你需要跟上这个领域的发展脚步,因此,你必须不断的学习,不断的前进.本文将分享能够帮助您快速掌 ...
随机推荐
- 转 python语法学习面向对象之继承
传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...
- AC日记——2条不相交的路径 51nod 1076
1076 2条不相交的路径 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 给出一个无向图G的顶点V和边E.进行Q次查询,查询从G的某个顶点V[s] ...
- BZOJ1009GT考试 DP + KMP + 矩陣快速冪
@[DP, KMP, 矩陣快速冪] Description 阿申准备报名参加GT考试,准考证号为\(N\)位数\(X_1 X_2 .. X_n(0 <= X_i <= 9)\),他不希望准 ...
- MAC终端命令行整理
参考:http://www.jianshu.com/p/3291de46f3ff 目录操作 命令名 说明 举例 cd 切换到指定目录 cd test ls 查看这个目录下的所有文件 ls /Users ...
- javascript --- 继承小结
回顾之前学到的知识,大体上可以分为两类: 1. 基于构造器工作的模式. 2. 基于对象的工作模式. 3. 是否使用原型 4. 是否执行属性拷贝. 5. 两者都有(执行原型属性拷贝) 下面我们把之前的知 ...
- weblogic92 启动慢解决办法
使用SUN JDK 启动时要很长时间,但启动启来weblogic正常. 特征见下面标红部分,时间很长. test01@linux-suse:~/bea/weblogic92/samples/dom ...
- 2.【nuxt起步】-初始化创建nuxt项目
1. 脚手架初始化: vue init nuxt-community/starter-template NuxtMyms 2.输入项目相关信息 3.切换到项目目录下 安装依赖 Cd nuxtmyms ...
- Excel导入的HDR=YES; IMEX=1详解
参数HDR的值:HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用.系统默认的是YES 参数Excel 8.0对于Excel 97以上版本都 ...
- 如何突破Windows环境限制打开“命令提示符”
如今,许多企业或组织都会通过使用受限的windows环境来减少系统表面的漏洞.系统加固的越好,那么也就意味着能被访问和使用到的功能就越少. 我最近遇到的情况是,一个已经加固的系统同时受到McAfee ...
- C++简单介绍
一.怎样用C++的源文件产生一个可运行程序 一个C++程序由一个或者多个编译单元组成.每一个编译单元都是一个独立的源码文件.一般是一个带.cpp的文件,编译器每次编一个文件编译单元,生成一个以.obj ...