Apple iOS Apps and caching at the edge proxy

Matthew Iselin asked:

Our network contains a growing number of iOS devices, all of which with very similar configurations. All Internet access is via a transparent proxy.

We’ve found that iOS updates and some free apps cache fine on the proxy, but any paid apps fail to cache properly (as they seem to be encrypted to the Apple ID (?)).

I’m just wondering if there’s any way forward with this where we could cache the paid apps so that they are purchased n times, but downloaded from the proxy cache instead of from the Internet each time. Bandwidth caps aside, the download direct from the Internet slows everything down for everyone, regardless of fairness queueing and related ‘fixes’.

I know this is quite unlikely, but I figured there’s nothing to lose and everything to gain before I look into other solutions (eg, QoS).

My answer:

The data you want to cache isn’t meant to be cached. It’s specific to the user(s) who are downloading them. (Caching paid apps as they’re downloaded would also make a great way to steal them, as well.)

This is why the origin server is sending headers like Cache-Control: private or no-cache along with it, to specifically instruct downstream caches like your proxy server not to cache the data.

Some caches such as squid provide ways of overriding these directives; since you didn’t say what you were using, please see your documentation for details if you’re really absolutely determined to do this. (But please don’t. It’ll break practically every other site that relies on this behavior being correct.)

View the full question and any other answers on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.