Ios NSURLConnection即使在重置授权Heder后也会返回缓存响应

Ios NSURLConnection即使在重置授权Heder后也会返回缓存响应,ios,objective-c,nsurlconnection,httprequest,httpresponse,Ios,Objective C,Nsurlconnection,Httprequest,Httpresponse,这就是用例 应用程序运行时,授权标头设置为零。你会得到新的数据 [_请求设置值:对于HttpHeaderField:@“授权”] 用户登录后,所有发送到服务器的请求都会使用如下的授权头发送 [\u请求集值:[NSString stringWithFormat:@“TruestUserName=%@&会话\u令牌=%@&apikey=1234567890”、@“username”、@“会话\u令牌”] forHTTPHeaderField:@“授权”] 现在我注销,现在每个请求都带有授权头nil值

这就是用例

  • 应用程序运行时,授权标头设置为零。你会得到新的数据

    [_请求设置值:对于HttpHeaderField:@“授权”]

  • 用户登录后,所有发送到服务器的请求都会使用如下的授权头发送

    [\u请求集值:[NSString stringWithFormat:@“TruestUserName=%@&会话\u令牌=%@&apikey=1234567890”、@“username”、@“会话\u令牌”] forHTTPHeaderField:@“授权”]

  • 现在我注销,现在每个请求都带有授权头nil值

    [_请求设置值:对于HttpHeaderField:@“授权”]

  • 但我仍然得到响应,好像我是一个登录用户?知道有什么问题吗

    使用以下命令向服务器发出请求

    [NSURLConnection sendAsynchronousRequest:_request
                                               queue:[NSOperationQueue mainQueue]
                                   completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {}];
    
    我试着通过以下两种方式发出NSMutableURLRequest

        _request = [NSMutableURLRequest requestWithURL:url];
    
        _request = [[NSMutableURLRequest alloc] initWithURL:url
                                                                    cachePolicy:NSURLRequestReloadRevalidatingCacheData
                                                                timeoutInterval:60];
    

    看起来像是服务器问题。服务器应该发送响应头,告诉URL加载系统不要缓存响应。

    看起来像是服务器问题。服务器应发送响应头,告知URL加载系统不要缓存响应。

    在使用请求之前,您可以禁用Cookie的使用:

    [_request setHTTPShouldHandleCookies:NO];
    
    或者,从
    NSHTTPCookieStorage
    singleton中删除任何cookie或相关cookie


    但是,您可以使用
    NSURLConnection
    实现委托
    连接:willSendRequestForAuthenticationChallenge:
    极大地改进您的代码,您可以在其中完全自定义身份验证处理。

    您可以在使用请求之前禁用cookie:

    [_request setHTTPShouldHandleCookies:NO];
    
    或者,从
    NSHTTPCookieStorage
    singleton中删除任何cookie或相关cookie


    但是,您可以使用
    NSURLConnection
    实现委托
    连接:willSendRequestForAuthenticationChallenge:
    极大地改进代码,在这里您可以完全自定义身份验证处理。

    客户端可以指定特定的缓存头,服务器可以相应地响应。代理人也参与其中。一般来说,如果不查看数据包跟踪,就不能说这是一个服务器问题。客户机可能会指定特定的缓存头,服务器可能会做出相应的响应。代理人也参与其中。如果不查看数据包跟踪,就不能笼统地说这是服务器问题。谢谢。它已经解决了这个问题。当然,您可以使用委托方法并实现您想要的任何细节和任何自定义行为,只要它符合HTTP协议;他为我做了这件事。谢谢。干草人,谢谢你的帮助。我想我再次需要你的帮助:)。这个问题又出现了。现在,当我移动到https时,当我尝试连续拨打两个电话时,就会发生这种情况。这是预期的行为。建立初始SSL/TSL连接需要执行握手协议,该协议在CPU和时间方面有点复杂且昂贵。因此,TLS协议允许一种安全的方式来缩短此过程:“恢复TLS握手”。这允许连接使用标识会话的“会话ID”或“会话票证”。NSURLConnection如何在其方便的方法中准确地利用这些选项,目前还不得而知,但它确实使用了这些选项。好的,定制这个的唯一方法是实现NSURLConnection的委托方法。谢谢。它已经解决了这个问题。当然,您可以使用委托方法并实现您想要的任何细节和任何自定义行为,只要它符合HTTP协议;他为我做了这件事。谢谢。干草人,谢谢你的帮助。我想我再次需要你的帮助:)。这个问题又出现了。现在,当我移动到https时,当我尝试连续拨打两个电话时,就会发生这种情况。这是预期的行为。建立初始SSL/TSL连接需要执行握手协议,该协议在CPU和时间方面有点复杂且昂贵。因此,TLS协议允许一种安全的方式来缩短此过程:“恢复TLS握手”。这允许连接使用标识会话的“会话ID”或“会话票证”。NSURLConnection如何在其方便的方法中准确地利用这些选项,目前还不得而知,但它确实使用了这些选项。好的,定制这个的唯一方法是实现NSURLConnection的委托方法。