URLSession and GZip
Another short entry, just to make a search engine indexable note about something I’ve discovered. It appears that when using URLSession
in iOS, there is no way to stop the OS from decompression gzipped content. Normally you’d want it to do this, but in my case I would actually prefer to preserve the gzipped body on disk. Worse, having the gunzipped body means that the Content-Length
header is no longer accurate, and when you’re using SQLite 3’s blob streaming functions (which I am, more on that later) you need to know the length upfront.
Long story short, I have no answer on accessing the gzipped body. It doesn’t seem to be possible, at least not right now. But there is some good news: URLSessionTask
has a property named countOfBytesExpectedToReceive
, which is accurate for gunzipped content. So, in my Fetch implementation I’m now rewriting headers as they are passed to JS - removing the Content-Encoding
header and rewriting the Content-Length
one. Not great. But better than nothing.