Corrija-me se estiver errado e sei que este é um post antigo - mas gostaria de comentar sobre novos transeuntes. Eu acredito que um cache de proxy reverso não ajuda tanto quanto você gostaria ao usar ETags.
Os mecanismos de armazenamento em cache de validação usam o servidor de origem para validar se a ETag (ou data da última modificação) na solicitação ainda é válida (corresponde ou não ao etag de recursos, dependendo do cabeçalho usado ou se foi / não foi modificado desde a data indicada no pedido).
Isso significa que um cache de proxy reverso, como o Varnish, ainda passará essa solicitação para o servidor de origem. Pode responder com a solicitação em vez de o servidor lidar com isso, mas você não salvou a viagem de ida e volta no servidor de origem.
Os navegadores podem armazenar em cache respostas e manipular uma resposta 304 em qualquer caso, portanto, o cache privado do usuário pode ser mais adequado para lidar com isso do que usar um proxy reverso (YMMV, especialmente em escala e dependendo do seu caso de uso, é claro. deseja fazer suposições sobre seus aplicativos).
A partir da especificação 13.3 :
Quando um cache tem uma entrada obsoleta que gostaria de usar como resposta à solicitação de um cliente, primeiro deve verificar com o servidor de origem (ou possivelmente um cache intermediário com uma nova resposta) para ver se sua entrada em cache ainda é utilizável. . Chamamos isso de "validação" da entrada de cache. Como não queremos pagar a sobrecarga de retransmitir a resposta completa se a entrada em cache for boa e não queremos pagar a sobrecarga de uma viagem de ida e volta extra se a entrada em cache for inválida, o protocolo HTTP / 1.1 suporta o uso de métodos condicionais.
e observe 13.3.4 :
Um proxy de cache HTTP / 1.1, ao receber uma solicitação condicional que inclui uma data da última modificação e uma ou mais tags de entidade como validadores de cache, NÃO DEVE retornar uma resposta armazenada em cache localmente ao cliente, a menos que essa resposta em cache seja consistente com todos os campos de cabeçalho condicional na solicitação.
Portanto, o Varnish pode retornar uma resposta para você, mas você ainda tem uma viagem de ida e volta ao servidor. Se você pode usar um cache de aplicativo como APC ou memcache, isso ainda pode valer a pena para você. O cache de validação geralmente é melhor para economia de largura de banda do que para economia de recursos do servidor.
É melhor deixar o cache de validação para o cliente (navegador ou código da API).
O uso do modelo Expiration para armazenamento em cache é onde um cache de proxy reverso realmente brilha. Isso permite que você pule completamente o servidor de origem. Usando Expires
, Cache-Control
, Date
, etc, é a melhor (mais uma vez, IMO) mecanismo para um cache de proxy reverso como o cache pode retornar a resposta, assumindo a sua não obsoleto, sem nunca bater o servidor de origem.