AFNetworking não armazena em cache a solicitação HTTPS
-
12-12-2019 - |
Pergunta
Estamos construindo um aplicativo iOS que usa AFNetworking para se conectar a um servidor executando o Tornado.O servidor inclui o cabeçalho Cache-Control: private, max-age=900
na resposta.Ao executar o servidor em minha máquina local, posso dizer que o AFNetworking usa os valores armazenados em cache porque não há solicitações recebidas pelo servidor em solicitações repetidas do aplicativo.Quando implantamos o mesmo servidor Tornado na máquina de teste, cada solicitação do aplicativo resulta em uma solicitação recebida no servidor, ignorando o valor armazenado em cache.
A única diferença entre as duas configurações é a URL do servidor e o fato de o servidor de teste ser acessado por meio de uma conexão HTTPS, enquanto o host local usa HTTP.O HTTPS afeta o cache do AFNetworking e, em caso afirmativo, como podemos fazer com que o AFNetworking respeite o cabeçalho do cache?
Solução
Não tenho certeza se isso vai ajudar, mas aqui está de qualquer maneira:AFNetworking usa NSURLConnection que usa cache compartilhado NSURLCache.AFNetworking é absolutamente transparente em relação ao cache e não faz nada específico.Minhas solicitações são https e estavam armazenadas em cache perfeitamente.
As diretivas de resposta Cache-Control permitem que um servidor de origem substitua a capacidade de cache padrão de uma resposta:Privado indica que toda ou parte da mensagem de resposta é destinada a um único usuário e não deve ser armazenado em cache por um cache compartilhado.Isso permite que um servidor de origem afirme que as partes especificadas da resposta são destinadas a apenas um usuário e não são uma resposta válida para solicitações de outros usuários.Um cache privado (não compartilhado) PODE armazenar em cache a resposta.http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
Se for aceitável, tente mudar a política para pública.Registre os cabeçalhos da resposta do aplicativo e observe seu cache.db e veja se de fato algo está armazenado em cache lá.
Tente configurar o cache compartilhado - algo parecido com
int cacheSizeMemory = 1*1024*1024; // 4MB
int cacheSizeDisk = 100*1024*1024; // 100MB
[[NSURLCache sharedURLCache] setMemoryCapacity:cacheSizeMemory];
[[NSURLCache sharedURLCache] setDiskCapacity:cacheSizeDisk];
Outra boa leitura sobre isso aquihttp://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/