我有一个文件在我的 Web服务器 上,每次访问时都会从服务器下载它,因为文件内容可能已更改。但如果文件已更改,我希望只在那个时间下载,以节省带宽,这就是 ETag 和 If-None-Match 的作用。
- 第一次请求时,我会从HTTP响应标头中检索 ETag 值。
注意:
当我尝试在 Chrome 中的 Advanced REST Client 应用程序中执行上述步骤时,它可以正常工作,但是当我尝试在 iOS 中执行时,我总是得到响应代码 200,但应该给我 304。
下面是我使用的示例代码
var request1 = NSMutableURLRequest(URL:NSURL(string: "http://10.12.1.101/Etag/ringtone1.mp3")!)
let Etagvalue="\"36170-52c1cc36d9b40\""
var session1 = NSURLSession.sharedSession()
request1.HTTPMethod = "GET"
var err: NSError?
request1.addValue(Etagvalue, forHTTPHeaderField: "If-None-Match")
var task = session1.dataTaskWithRequest(request1, completionHandler: {data, response, error -> Void in
print("response: \(response)")
})
这是回应内容
回应: 可选的( { URL: http://10.12.1.101/Etag/ringtone1.mp3 } { 状态码: 200, 头部 { "Accept-Ranges" = bytes; Connection = "Keep-Alive"; "Content-Length" = 221552; "Content-Type" = "audio/mpeg"; Date = "Wed, 24 Feb 2016 14:57:53 GMT"; Etag = "\"36170-52c1cc36d9b40\""; "Keep-Alive" = "timeout=5, max=100"; "Last-Modified" = "Fri, 19 Feb 2016 10:15:33 GMT"; Server = "Apache/2.4.16 (Unix) PHP/5.5.29"; } })
我在这里做错了什么?