Pergunta

Um servidor HTTP usa conteúdo de negociação para servir um único Identidade- URL ou codificada em gzip com base no cabeçalho da Accept-Encoding do cliente.

Agora, dizer que temos um proxy cache como lulas entre clientes e o httpd.

Se o proxy tem em cache ambas codificações de uma URL, como se determinar qual a servir?

A instância não-gzip (não servia originalmente com Vary) pode ser servido a qualquer cliente, mas as instâncias codificadas (tendo Vary: Accept-Encoding) só pode ser enviado a um cliente com o valor do cabeçalho Accept-Encoding idêntica como foi usado na solicitação original .

por exemplo. Opera envia "deflate, gzip, x-gzip, identity, *;q=0" mas IE8 envia "gzip, deflate". De acordo com a especificação, em seguida, caches não devem compartilhar caches codificado de conteúdo entre os dois navegadores. Isso é verdade?

Foi útil?

Solução

Em primeiro lugar, é IMHO incorreta não enviar "Vary: Accept-Encoding". Quando a entidade varia de fato por esse cabeçalho (ou sua ausência)

Dito isto, a especificação atualmente na verdade não permite servir a resposta em cache para Opera, porque o cabeçalho Vary não corresponde acordo com as definições em HTTPbis, Parte 6, Seção 2.6 . Talvez esta é uma área onde devemos relaxar os requisitos para caches (você pode querer acompanhar o IETF HTTP mailing list ...

UPDATE: Acontece que este já estava marcado como uma questão em aberto; Acabei de adicionar um problema em nosso issue tracker para isto, veja Issue 147 .

Outras dicas

Julian é certo, é claro. Lição:. Sempre enviar Vary: Accept-Encoding quando sniffing Accept-Encoding , não importa o que a codificação resposta

Para responder a minha pergunta, se você deixar erroneamente Vary fora, se um proxy recebe uma resposta não codificado (sem Vary), ele pode simplesmente cache e retornar isso para cada solicitação subseqüente (ignorando Accept-Encoding). Squid faz isso .

O grande problema com deixando de fora Vary é que, se o cache recebe uma variante codificada sem Vary, em seguida, ele pode enviar este em resposta a outras solicitações mesmo que a sua Accept-Encoding indica o cliente não pode compreender o conteúdo.

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