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?

Foi útil?

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top