Objective-C(iOS)でspdy[CocoaSPDY]
サイトはTwitterでテスト。
NSURLSessionを使用。
NSURLConnectionやSLRequestでもpreparedURLRequest
を使うことで実装可能なようだ。
手順
①ライブラリの準備
https://github.com/twitter/CocoaSPDY からダウンロード。
必要な物は、Products下のSPDY.frameworkだけ。
プロジェクトを開いて、Show in Finderでコピー。
プロジェクトに追加すると、Link Binary With Librariesにも自動で追加される。
さらに、CFNetwork.frameworkとlibz.dylibを追加
Build settingsのOther Linker Flagsに
$(OTHER_LDFLAGS) -ObjCを追加。しておかないと実行時に
unrecognized selector sent to instanceエラーになる。
参考:https://developer.apple.com/library/mac/qa/qa1490/_index.html
②import,Delegate
#import <SPDY/SPDYProtocol.h>
NSURLSessionDelegate,
NSURLSessionDownloadDelegate,
NSURLSessionDataDelegate
- (void)URLSession:(NSURLSession *)session ***
③実行コードサンプル
-(void) sendHTTPGet
{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
defaultConfigObject.protocolClasses = @[[SPDYURLSessionProtocol class]];
NSURLSession *delegateFreeSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];
NSURL * url = [NSURL URLWithString:@"https://twitter.com/"];
NSURLSessionDataTask * dataTask = [delegateFreeSession dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if(error == nil){
NSLog(@"%@",response);
}
}];
[dataTask resume];
}
defaultConfigObject.protocolClasses = @[[SPDYURLSessionProtocol class]];
をすることで、サイトがspdyに対応していればレスポンスが返ってくる。
Twitterの場合、spdyでの通信時のみHTTPヘッダに
"x-spdy-parallelism" = 1;
"x-spdy-stream-id" = 1;
"x-spdy-version" = "3.1";
といったパラメータが追加されている。
spdyについては、以下サイトなどが分かりやすい。
追記
”SPDY”自体のサポートは終了しHTTP/2へと移行されていくようです。
・「Google Chrome」の“SPDY”サポートが終了、“HTTP/2”へ
http://www.forest.impress.co.jp/docs/news/20150210_687689.html
・Hello HTTP/2, Goodbye SPDY
http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html
Discussion