• iOS网络-NSURLSessionConfiguration会话配置


    作用:可以统一配置NSURLSession,如请求超时等

    创建配置的三种方式

    + (NSURLSessionConfiguration *)defaultSessionConfiguration;
    //返回标准配置,这实际上与NSURLConnection的网络协议栈是一样的,具有相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage。
    + (NSURLSessionConfiguration *)ephemeralSessionConfiguration;
    //返回一个预设配置,没有持久性存储的缓存,Cookie或证书。这对于实现像"秘密浏览"功能的功能来说,是很理想的。
    + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier     NS_AVAILABLE(10_10, 8_0);
    //独特之处在于,它会创建一个后台会话。后台会话不同于常规的,普通的会话,它甚至可以在应用程序挂起,退出,
    崩溃的情况下运行上传和下载任务。初始化时指定的标识符,被用于向任何可能在进程外恢复后台传输的守护进程提供上下文。

    重要的属性:

    # 替代 request 中的 forHTTPHeaderField 告诉服务器有关客户端的附加信息
    "HTTPAdditionalHeaders"指定了一组默认的可以设置出站请求的数据头。这对于跨会话共享信息,如内容类型,语言,用户代理,身份认证,是很有用的。

    # WebDav的身份验证
    NSString *userPasswordString = [NSString stringWithFormat:@"%@:%@", user, password];
    NSData * userPasswordData = [userPasswordString dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];
    NSString *authString = [NSString stringWithFormat:@"Basic: %@", base64EncodedCredential];

    # 设置客户端类型

    NSString *userAgentString = @"iPhone AppleWebKit";

    configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json",
                                            @"Accept-Language": @"en",
                                            @"Authorization": authString,
                                            @"User-Agent": userAgentString};

    "networkServiceType(网络服务类型)"对标准的网络流量,网络电话,语音,视频,以及由一个后台进程使用的流量进行了区分。大多数应用程序都不需要设置这个

    "allowsCellularAccess(允许蜂窝访问)""discretionary(自行决定)"被用于节省通过蜂窝连接的带宽。建议在使用后台传输的时候,使用discretionary属性,
    而不是allowsCellularAccess属性,因为它会把WiFi和电源可用性考虑在内
    "timeoutIntervalForRequest""timeoutIntervalForResource"指定了请求以及该资源的超时时间间隔。许多开发人员试图使用timeoutInterval去限制发送请求的总时间,但这误会了timeoutInterval的意思:报文之间的时间。timeoutIntervalForResource实际上提供了整体超时的特性,这应该只用于后台传输,而不是用户实际上可能想要等待的任何东西

    "HTTPMaximumConnectionsPerHost"Foundation 框架中URL加载系统的一个新的配置选项。它曾经被用于NSURLConnection管理私人连接池。现在有了NSURLSession,开发者可以在需要时限制连接到特定主机的数量

    "HTTPShouldUsePipelining"也出现在NSMutableURLRequest,它可以被用于开启HTTP管道,这可以显着降低请求的加载时间,但是由于没有被服务器广泛支持,默认是禁用的

    "sessionSendsLaunchEvents" 是另一个新的属性,该属性指定该会话是否应该从后台启动

    "connectionProxyDictionary"指定了会话连接中的代理服务器。同样地,大多数面向消费者的应用程序都不需要代理,所以基本上不需要配置这个属性
    关于连接代理的更多信息可以在 CFProxySupport Reference 找到。

    "Cookie Policies"
    "HTTPCookieStorage" 是被会话使用的cookie存储。默认情况下,NSHTTPCookieShorage+ sharedHTTPCookieStorage会被使用,这与NSURLConnection是相同的
    "HTTPCookieAcceptPolicy" 决定了该会话应该接受从服务器发出的cookie的条件
    "HTTPShouldSetCookies" 指定了请求是否应该使用会话HTTPCookieStoragecookie

    "Security Policies"
      URLCredentialStorage 是会话使用的证书存储。默认情况下,NSURLCredentialStorage + sharedCredentialStorage 会被使用使用,这与NSURLConnection是相同的

    "TLSMaximumSupportedProtocol" "TLSMinimumSupportedProtocol" 确定是否支持SSLProtocol版本的会话

    "Caching Policies"
    URLCache 是会话使用的缓存。默认情况下,NSURLCache + sharedURLCache 会被使用,这与NSURLConnection是相同的
    requestCachePolicy 指定了一个请求的缓存响应应该在什么时候返回。这相当于NSURLRequest -cachePolicy方法

    "Custom Protocols"
    protocolClasses是注册NSURLProtocol类的特定会话数组

    统一配置NSURLSession代码示例:

    -(NSURLSession *)session
    {
        if (_session == nil) {
    
            //创建NSURLSessionConfiguration
            NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    
            //设置请求超时为10秒钟
            config.timeoutIntervalForRequest = 10;
    
            //在蜂窝网络情况下是否继续请求(上传或下载)
            config.allowsCellularAccess = NO;
    
            _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        }
        return _session;
    }
  • 相关阅读:
    深度学习(dropout)
    centos 常见软件安装
    最近读的书 与论文
    如何理解反向传播 Backpropagation 梯度下降算法要点
    ubuntu 15 安装cuda,开启GPU加速
    快速排序算法
    Linux网络中接收 "二进制" 流的那些事 --- 就recv的返回值和strlen库函数进行对话
    linux源码升级编译内核
    C/C++中慎用宏(#define)
    Qt之hello world
  • 原文地址:https://www.cnblogs.com/liugengqun/p/5140296.html
Copyright © 2020-2023  润新知