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的编译结果最终将形成一个通用的二进制文件(因此上述设置配了也没有效果)。

相关文章
|
2月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
210 1
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
|
3月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
420 1
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
|
3月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
581 0
|
7月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
211 4
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
|
安全 Android开发 iOS开发
Android vs iOS:深入剖析两大移动操作系统的优劣与未来趋势####
【10月更文挑战第21天】 本文旨在通过技术视角,全面对比分析Android与iOS两大主流移动操作系统的架构差异、用户体验、安全性及生态系统等方面,探讨其各自优势与不足,并预测未来发展趋势。 ####
1399 1
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
8月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
238 0
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
|
10月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
505 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
10月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
186 0
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
|
9月前
|
Android开发 UED iOS开发
Harmony os next~UI开发与ArkUI框架
鸿蒙OS的UI开发基于ArkUI框架,采用声明式编程,简化开发流程。五大核心组件(Text、Button、List、Grid、Flex)助力高效布局,支持数据绑定与动态更新。事件响应机制灵敏,适合构建交互丰富的应用。实战技巧包括规范命名、样式复用和调试方法。掌握这些,轻松开发鸿蒙应用。下期预告:分布式开发,记得带上烤冷面!
323 0

推荐镜像

更多