iOS:在请求中发送 If-Modified-Since 标头

4

有人知道如何在url请求中发送If Modified Since头吗?

我正在尝试获取一个状态码,以告诉我一个RSS页面是否已更新。

更新#1: 我能够进行以下测试:

NSURL *url = [NSURL URLWithString:self.url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request addValue:@"Tue, 18 Nov 2014 20:46:46 GMT" forHTTPHeaderField:@"If-Modified-Since"];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

    int responseCode = (int)[httpResponse statusCode];
    NSLog(@"All headers: %@", [httpResponse allHeaderFields]);
    NSLog(@"Status code:: %d", responseCode);
}];

如果我删除整个iOS应用并运行它,我会得到304状态码,这很奇怪。但是,如果我注释掉添加"If-Modified-Since"值的那一行,并重新运行它,我就会得到200,但是当我取消注释并重新运行它时,304错误就不再出现,而是变成了200错误码。唯一可以让304错误再次出现的方法是将整个应用程序从我的iPhone设备上删除。
你有什么想法吗?

请检查答案是否与此处相同: https://dev59.com/PY3da4cB1Zd3GeqPxUI1#31567943 - mkumar
使用NSURLSession如何确定资源是否已更改?我正在尝试使用NSURLSession下载文件并检查它们是否已更改。我知道可以使用NSURLConnection的If-Modified-Since头来执行此操作,但是我无法找到NSURLSession中的等效方法。有人知道如何在NSURLSession中实现此功能吗? - mkumar
2个回答

11

我有点晚了,但是由于NSURLConnection会缓存响应以便获取304代码,所以您应该像这样创建您的请求。

NSURLRequest *request = [NSURLRequest requestWithURL:url
                                         cachePolicy:NSURLRequestReloadIgnoringCacheData
                                     timeoutInterval:60.0];

0

304不是错误!它意味着资源与您上次请求的相同。 将其值设置为从相同端点收到的Last-Modified值。如果自上次请求以来未更新资源,则服务器将发送304(未修改)状态码响应。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接