2011年11月29日 星期二

NSURLConnection的header格式


平常用NSURLConnection也就好好的
剛好遇到了spec上的需求,需要改寫HTTP header
稍微查一下,其實不難 (list.apple.com)

1. 如果想一次改比較多項

[request setAllHTTPHeaderFields: 
        [NSDictionary dictionaryWithObjectsAndKeys: 
                                     @"iPhone", @"User-Agent",
                                     @"close", @"Connection",
                                     @"gzip", @"Accept-Encoding",
                                     @"*/*", @"Accept", nil]];

2. 如果改個其中一個

[request setValue:@"aValue" forHTTPHeaderField:@"field"];
只是有兩點要比較注意的:
1. HTTP header欄位是case-insensitive, 但是要記得使用NSMutableURLRequest才能修改
2. 有關 Connection這個header是無法改寫的! 沒錯,只有keep-alive,就算改了close一樣無效

第二點除了一開始的參考連結有提到這個問題外,在cocoabuilder.com也有人提出相同問題根據討論的結果,可能Apple當初就希望手持裝置的連線是採取盡其所能的連著,除非server端主動斷線...另外一方面來講,當然是這個API的一個bug...

看文章從2005年到現在都幾年了!如果非要close的header請自行下海CFNetwork客製化吧~

內容回應