Re: 'Global' NSURLCache?
Re: 'Global' NSURLCache?
- Subject: Re: 'Global' NSURLCache?
- From: "Quinn \"The Eskimo!\"" <email@hidden>
- Date: Wed, 29 Nov 2017 08:39:53 +0000
On 29 Nov 2017, at 03:48, email@hidden wrote:
> I've set this up for our app that uses a group container, where the main app
> and a helper app both use the same custom NSURLCache, and it does work
Yay!
> Is there a way to specify what headers are significant when requesting a
> cached response from a NSURLCache?
No.
I had a complex spiel regarding workarounds (I plonked it at the end of this
email, just so it’s not lost) but I figured I should check that the
`User-Agent` string is the problem here. And I’m not sure it is. Consider
this code:
---------------------------------------------------------------------------
let url = URL(string: "http://example.com")!
var req1 = URLRequest(url: url)
req1.setValue("agent1", forHTTPHeaderField: "User-Agent")
var req2 = URLRequest(url: url)
req2.setValue("agent2", forHTTPHeaderField: "User-Agent")
let res1 = HTTPURLResponse(url: url, statusCode: 200, httpVersion: "HTTP/1.1",
headerFields: [
"Date": "Wed, 29 Nov 2017 08:33:15 GMT",
"Server": "Apache",
"Last-Modified": "Mon, 11 Mar 2013 21:44:16 GMT",
"ETag": "\"606-4d7ad13106c00\"",
"Accept-Ranges": "bytes",
"Content-Length": "18",
"Connection": "close",
"Content-Type": "text/html",
])!
let cres1 = CachedURLResponse(response: res1, data: "Hello Cruel
World!".data(using: .utf8)!)
URLCache.shared.storeCachedResponse(cres1, for: req1)
let cres2 = URLCache.shared.cachedResponse(for: req2)
---------------------------------------------------------------------------
`cres2` comes back as non-nil, even though `req2` has a different `User-Agent`
header than the `req1` that was used to store the response. So, are you sure
that the `User-Agent` string is the problem here?
Share and Enjoy
--
Quinn "The Eskimo!" <http://www.apple.com/developer/>
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
---------------------------------------------------------------------------
The most obvious solution here is to have both the app and the helper set the
same `User-Agent` string. That seems reasonable given that one is embedded
within the other. Why not do that?
If you have to keep these separate then there other games you can play. For
example, you could:
1. Implement `-URLSession:dataTask:willCacheResponse:completionHandler:` and
normalise the `User-Agent` string in the cached response.
2. Initially try to fetch the request from the cache with the normalised
`User-Agent` string and the `NSURLRequestReturnCacheDataDontLoad` cache policy.
If it loads, you’ll then have to check the age yourself. If it doesn’t load,
or its too old, you can issue a new load request with the default cache policy.
---------------------------------------------------------------------------
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden