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

Posted

技术标签:

【中文标题】iOS:如果已修改,则发送带有请求的标头【英文标题】:iOS: Send If Modified Since header with request 【发布时间】:2015-01-18 19:40:34 【问题描述】:

有谁知道如何发送带有 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 设备上删除整个应用程序。

有什么想法吗?

【问题讨论】:

检查答案与此处相同***.com/questions/31551964/… 与***.com/questions/31551964/…相同的帖子 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于iOS:如果已修改,则发送带有请求的标头的主要内容,如果未能解决你的问题,请参考以下文章

在 CORS 中,是不是已预先发送带有凭据的 POST 请求?

如果通过 Zuul API 网关发送请求,则缺少授权标头

Auth 标头未与 GET 请求一起发送

如何使用请求发送带有标头的 PATCH 请求

如何在scrapy中发送带有标头和有效负载的Post请求

发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求