CocoaSPDY:Twitter推出的用于iOS和Mac OS X的SPDY框架

简介: SPDY最初是Google设计的用于替代HTTP的试验品。虽然SPDY是一个二进制协议(无法像HTTP那样,人们可以直观读懂),但是SPDY与HTTP完全兼容。而且,颇具现实意义的是,目前正在进行中的 HTTP2.0 草稿就是基于SPDY的。

SPDY 是什么?

SPDY最初是Google设计的用于替代HTTP的试验品。虽然SPDY是一个二进制协议(无法像HTTP那样,人们可以直观读懂),但是SPDY与HTTP完全兼容。而且,颇具现实意义的是,目前正在进行中的 HTTP2.0 草稿就是基于SPDY的。


为了对HTTP进行加速,SPDY做了如下改进:

首先,也是最被称道的是“请求的多路传输处理”。与传统的建立一个TCP链接只能发送一个请求不同的是,SPDY可以通过一个TCP会话同时处理多个请求,而且针对请求的返回值可以做到乱序处理,也就是说只要接到返回就能立即处理(比如下面介绍的CRIME攻击。)。


其次,SPDY对请求和返回的头信息都做了压缩处理。由于不同请求的头信息通常都包含许多相似的信息,所以这些重量级的头信息有很大的压缩处理空间。


最后,SPDY引入了推送服务(本版框架未支持,估计后续会推出)。就是在client不需要知情的情况下由服务器向其推送内容。推送的信息可以是诸如样式、图片或者是实时事件等。


轻量级版的SDPY可以对HTTP请求做一定程度的加速,某种程度上会达到非常快的效果。详情参见:


开始使用

只要使用者的应用或工程的请求是基于NSURL来处理的(基于NSURL的第三方库也可以,例如AFNetworking),都可以将SPDY直接添加到现有的apps或者工程中。请将SPDY的framework bundle添加到工程中,然后link到目标target后再启用协议即可。framework同时含有针对不同架构或者系统的二进制包,iOS6以上和OS X Lion之后的系统以及所有运行以上系统的硬件设备都支持。而发布态的应用中的SPDY的包大小也做了空间优化。


启用SPDY

使用SPDY framework需要在工程中链接系统的库CFNetworking.framework和libz.dylib。具体操作:选择target配置下“Build Phases”页签中的“Link Binary with Libraries”来添加。

在应用中使用NSURLConnection或者NSURLSession去处理HTTP请求会对SPDY的启用方式有一点点的影响。为了使原有NSURLConnection堆栈中的请求最终可以通过SPDY,需要调用一个方法来将堆栈中原有的一个或多个请求(protocol-host-port tunple)转向SPDY来处理。

#import <SPDY/SPDYProtocol.h>

...

[SPDYURLConnectionProtocol registerOrigin:@"https://api.twitter.com:443"];

注意,由于SPDY使用不同的会话来处理“http”以及“https”类型的请求,所以原始请求中如包含“http”和“https”,那么在一开始就要分别注册。添加到会话中的原始请求只有https类型的会进行TLS加密。

#import <SPDY/SPDYProtocol.h>

...

NSURLSessionConfiguration configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

configuration.protocolClasses = @[[SPDYURLSessionProtocol class]];

上述的方法可以单独或者组合使用,SPDY的会话在请求堆栈中是共享的。采用前一种方式注册到SPDY的原始请求将使用默认的NSURLSession。

以上就是将现有HTTP请求迁移到SPDY所要做的全部事情。当然,还需对服务器做相应的配置使其能处理SPDY请求。

请参考如下:

* netty

* jetty

* apache(with mod_spdy)


NPN

现有SPDY使用Next Protocol Implementation(NPN)而非HTTP,NPN是基于TLS的扩展实现。但是Secure Transport(苹果的TLS实现)不支持这种扩展,所以如果在应用中使用SPDY,后端的服务器要么需要特别配置例如开设专门的端口去直接支持SPDY的请求处理要么可以侦测请求类型去选择分发再分别处理SPDY和普通HTTP。在Twitter,我们采取后者的方式,但是第一种方式对大多数应用来说已经可以了。


为了便于协议使用和理解,本版SPDY在index 0配置了一个非标准化的的设置id:SETTINGS_MINOR_VERSION。以此来区分SPDY/3和SPDY/3.1中没有使用NPN的链接。因为并不是所有的server都支持此项设置,可以在运形态对这个协议设置进行配置关闭。


实现说明

CRIME攻击

CRIME攻击是一种明文注入技术,可以根据请求压缩内容的长度来推测加密信息(主要针对头信息中的cookies)的内容。这是浏览器普遍存在的问题,攻击者可以通过挟持浏览器来不断变更发送的请求的明文内容,通过观察请求处理结果的变化来分析压缩内容的信息。对于那些限定请求数据格式的应用不需要特别考虑这些问题。但是,如果启用了请求头信息的压缩属性,开发者需要知道应用存在潜在的被攻击的风险。


编译Framework

如果想要自己编译framework,非常简单,Xcode可以直接搞定。但是还是有一些注意事项。在Xcode5之前,如果想要把framework编译成支持多平台的二进制文件(distribution模式),需要在target中指定framework编译平台为‘iOS Device’。这与Xcode特殊的编译过程有关,否则的话,编译会忽略掉一些但并不是全部的真机ARM架构相关的内容。在Xcode5中,所有平台target的编译结果最终将形成一个通用的二进制文件(因此上述设置配了也没有效果)。

相关文章
|
1月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
175 60
|
28天前
|
安全 Android开发 iOS开发
Android vs iOS:深入剖析两大移动操作系统的优劣与未来趋势####
【10月更文挑战第21天】 本文旨在通过技术视角,全面对比分析Android与iOS两大主流移动操作系统的架构差异、用户体验、安全性及生态系统等方面,探讨其各自优势与不足,并预测未来发展趋势。 ####
39 1
|
1月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
8天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
91 66
|
18天前
|
安全 生物认证 Android开发
深入探索iOS与Android操作系统的安全性差异
本文旨在通过对比分析iOS和Android两大主流移动操作系统在安全性方面的差异,揭示它们各自的安全机制、面临的挑战以及用户如何提升自身设备的安全保护。通过对系统架构、应用审核机制、数据加密方式及隐私政策的深入探讨,本文为读者提供了一个全面了解两大平台安全性的视角,并提出了实用的安全建议。
|
26天前
|
IDE 安全 Android开发
深入探索Android与iOS操作系统的架构差异
本文旨在对比分析Android和iOS两大主流移动操作系统在架构设计上的根本差异。通过详细解读两者的系统架构、开发环境、以及安全性等方面,揭示它们各自的特点及优势,为开发者选择合适的平台提供参考。
|
1月前
|
安全 定位技术 Android开发
深入探索Android与iOS操作系统的安全性差异
【10月更文挑战第21天】 在当今数字化时代,智能手机已成为我们生活中不可或缺的一部分。其中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体。然而,它们在安全性方面的表现却大相径庭。本文将深入探讨Android与iOS在安全机制、隐私保护以及应对恶意软件方面的差异,帮助读者更全面地了解这两个平台的安全特性。
|
1月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS操作系统的差异性
本文旨在通过对比分析Android和iOS两大主流移动操作系统,揭示它们在设计理念、用户体验、安全性、应用生态及系统更新等方面的根本差异。不同于传统的功能列表式摘要,本摘要强调了两大系统背后的哲学思想及其对用户日常使用的实际影响,为读者提供了一个宏观且深入的视角来理解这两种操作系统的独特之处。
|
1月前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
1月前
|
搜索推荐 Android开发 iOS开发
安卓与iOS的较量:选择最适合你的移动操作系统
在智能手机市场上,安卓和iOS一直是两大主流操作系统。本文将深入探讨这两个系统的优缺点,帮助你根据自己的需求做出最佳选择。