在收到带有etag值的先前响应后,我无法迅速设置“If-None-Match”标头字段。
示例Swift代码:
import UIKit
import XCPlayground
func singleRequest(callback: (Void -> Void)?) {
let url = NSURL(string: "http://localhost:3000/")
let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10.0)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {
(response, data, error) in
callback?()
})
}
XCPSetExecutionShouldContinueIndefinitely()
singleRequest({
singleRequest({
})
})
示例nodeJS服务器:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain', 'ETag': '"075ced9bfb821b8d2d372ec9fccf95d1c"', 'Cache-Control' : 'private'});
res.end('Your node.js server is running on localhost:3000');
}).listen(3000);
查看Wireshark中的请求显示,两者都没有设置“If-None-Match”标头字段。我希望第二个请求从第一个响应中获取ETag值。
我尝试使用
明确设置URLCachelet URLCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
NSURLCache.setSharedURLCache(URLCache)
并使用NSURLSession,AFNetworking或AlamoFire代替NSURLConnection。似乎没什么用。