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月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
12天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
8天前
|
iOS开发 开发者 UED
探索iOS应用开发中的SwiftUI框架
【9月更文挑战第26天】 在iOS开发的海洋中,SwiftUI犹如一艘现代的快艇,引领着开发者们驶向更加高效与直观的编程体验。本文将带你领略SwiftUI的魅力,从其设计理念到实际应用,我们将一步步揭开它如何简化界面构建过程的面纱。通过对比传统方式,你将看到SwiftUI如何让代码变得像诗一样优美,同时保持强大的功能性和灵活性。准备好让你的iOS开发技能加速升级,一起驾驭这股新潮流吧!
|
14天前
|
前端开发 iOS开发 开发者
探索iOS开发中的SwiftUI框架
【9月更文挑战第21天】在iOS应用开发的广阔天地中,SwiftUI框架如一股清新之风,为开发者带来了声明式语法的便捷与高效。本文将深入探讨SwiftUI的核心概念、布局方式及数据绑定机制,同时通过实例演示如何运用SwiftUI构建用户界面,旨在引领读者领略SwiftUI的魅力,并激发其对iOS开发新趋势的思考与实践。
33 6
|
2月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
60 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
2天前
|
开发工具 Android开发 iOS开发
移动应用开发的艺术:探索Android与iOS的操作系统特性
【9月更文挑战第33天】在数字时代的浪潮中,移动应用已成为我们日常生活不可或缺的一部分。本文将深入探讨两个主流移动操作系统——Android和iOS——的独特特性,并分析它们如何影响移动应用的开发过程。我们将通过比较这两个系统的设计哲学、用户界面(UI)设计、开发工具以及市场策略,来揭示开发者如何在这些不同的平台上打造出色的用户体验。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解。
|
25天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:一场操作系统的较量
在数字时代的浪潮中,安卓和iOS这两大操作系统如同海上的两艘巨轮,各自承载着不同的使命与梦想。本文将深入浅出地探讨这两个系统在开发领域的异同,从用户体验、开发工具、市场趋势等多个维度进行比较分析。通过这场技术的较量,我们可以更好地理解每个系统的优势与局限,以及它们如何影响我们的日常生活和工作。
|
1月前
|
人工智能 安全 Android开发
安卓与iOS:操作系统的巨人较量
在数字时代的浪潮中,安卓和iOS作为两大主导力量,引领着智能手机市场的发展。本文将深入探讨这两个操作系统的设计哲学、用户界面、应用生态、安全性以及未来趋势,为读者提供一个全面的视角来理解它们之间的差异和各自的优势。
35 5
|
1月前
|
开发工具 Swift iOS开发
探索iOS开发中的SwiftUI框架
【9月更文挑战第1天】在本文中,我们将一起潜入iOS开发的海洋,特别聚焦于SwiftUI这一现代且富有表现力的框架。SwiftUI不仅简化了界面设计流程,还为开发者提供了声明式Swift语法的便利。通过这篇文章,你将学会如何利用SwiftUI构建灵活且响应式的用户界面,并理解其背后的原理。无论你是刚入门的新手还是寻求进阶的开发者,本文都将为你提供有价值的指导和启示。
|
2月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
下一篇
无影云桌面