iOS:发送如果已修改,因为带有请求的标头

时间:2014-11-20 19:45:18

标签: ios objective-c rss http-headers if-modified-since

有没有人知道如何使用网址请求发送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设备上的整个应用程序。

任何想法发生了什么?

2 个答案:

答案 0 :(得分:7)

有点晚了但是因为NSURLConnection正在缓存响应以获取304代码,所以你应该像这样创建你的请求。

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

答案 1 :(得分:0)

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