iOS使用IP直连时的Cookie管理
首先需要了解一下NSURLSessionConfiguration
基础, 在初始化NSURLSession
时, 需要传入一个NSURLSessionConfiguration
对象, 我们认为NSURLSessionConfiguration
是一个配置项, 在配置了这个对象以后, 通过它来配置的NSURLSession
发出的HTTP/HTTPS请求属性.
常见的HTTP配置例如:
- 缓存策略与缓存
requestCachePolicy
,URLCache
- 请求/响应超时
timeoutIntervalForRequest/timeoutIntervalForResource
- 网络访问策略
networkServiceType
和allowsCellularAccess
- 网络代理配置
connectionProxyDictionary
- Cookie管理策略
HTTPShouldSetCookies
,HTTPCookieAcceptPolicy
以及HTTPCookieStorage
- 公共请求头
HTTPAdditionalHeaders
- 支持的NSURLProtocol Hook,
protocolClasses
在使用这个NSURLSession
发起request
并接受response
时, 会根据NSURLSessionConfiguration
自动管理Cookie:
- 在请求发出去之前,
NSURLSession
会检查request.url.host
,并和当前的HTTPCookieStorage
中的Cookie.domain
进行匹配, 如果匹配成功, 那么会给request
增加Cookie
的header - 在收到
response
时,NSURLSession
根据response header
中的Set-Cookie
获取Cookie, 然后检查request.url.host
,两者匹配才会将后台种下的Cookie写入CookieManager
中.
有以上的基础, 在使用IP直连时:
- 由于我们会在请求时,将
request.URL.host
字段由domain
替换成ip
地址, 因此NSURLSession
在请求发送时检查Cookie
时, 就不会给我们增加Cookie header
, 因为Cookie
中的domain
字段是域名, 而我们request.URL.host
与Cookie.domain
不匹配. - 在
NSURLSession
收到response
时, 会检测Set-Cookie
字段, 然后根据Cookie.domain, path...
与request.url.host
是否匹配来决定是否写入CookieManager
中.
因此在处理Cookie时, 建议在处理Cookie时候, 参考HTTPDNS域名解析场景下如何使用Cookie?构造自己的HTTPDNSCookieManager