Qual poderia ser a diferença entre if-modify-since e if-none-match? Tenho a sensação de que if-none-match é usado para arquivos, enquanto if-modify-since é usado para páginas.
88
Em relação às diferenças entre Last-Modified/If-Modified-Since
e ETag/If-None-Match
:
Ambos podem ser usados alternadamente. No entanto, dependendo do tipo de recurso e de como ele é gerado no servidor, uma ou outra pergunta ("isso foi modificado desde ...?" / "Ainda corresponde a esta ETag?") Pode ser mais fácil de responder .
Exemplos:
mtime
como a Last-Modified
data é a solução mais simples.ETag
será muito mais fácil. Veja estes links para mais detalhes sobre o assunto:
If-Modified-Since
é comparado aoLast-Modified
enquantoIf-None-Match
é comparado aETag
. AmbosModified-Since
eETag
podem ser usados para identificar uma variante específica de um recurso.Mas a comparação de
If-Modified-Since
toLast-Modified
fornece a informação se a variante em cache é mais antiga ou mais recente, enquanto a comparação deIf-None-Match
toETag
fornece apenas a informação se ambas são idênticas ou não. Além disso, a maioria dosETag
geradores inclui as informações do inode específico do sistema, portanto, mover um arquivo para uma unidade diferente pode alterar oETag
também.fonte
O valor do carimbo de data / hora usado em Last-Modified / If-Modified-Since tem precisão limitada - um segundo e isso simplesmente não é suficiente para um conteúdo que muda rapidamente, como, por exemplo, um aplicativo de bate-papo na Web em que mais de uma mensagem pode ser postada a qualquer segundo . ETag / If-None-Match pode ajudar a resolver esse problema.
fonte
Conforme declarado nas práticas recomendadas do Google:
https://developers.google.com/speed/docs/best-practices/caching
fonte
Last-Modified
comETag
(ou, do lado useragent,If-Modified-Since
comIf-None-Match
) é mencionada. Da mesma forma, a especificação W3 não o restringe. Diz para não usarIf-Modified-Since
comIf-Match
, mas presumo que seja porque o conjunto de documentos com datas atualizadas, mas com o mesmo conteúdo definido pela ETag, deve ser bem pequeno.If-Modified-Since usa uma data, enquanto If-None-Match usa uma ETag . Ambos podem ser usados para "páginas" (ou seja, HTML) e outros arquivos.
fonte
A menos que declarado como fraco pelo servidor, um ETag é considerado um validador forte e, portanto, pode ser usado para satisfazer uma solicitação condicional de faixa. No entanto, a maioria das ETags geradas automaticamente apresentam dificuldades em situações de farm de servidores, pois costumam usar informações de inode e / ou um contador persistente exclusivo. Na prática, descobri que o cabeçalho Last Modified é suficiente para conteúdo razoavelmente estático, por exemplo, servir conteúdo estático protegido, uma vez que o tempo de gravação do arquivo é um validador razoavelmente bom.
A ETag é de longe a mais flexível. Os clientes em conformidade são obrigados a enviar a ETag em uma solicitação condicional, ao passo que DEVEM enviar ambas, se disponíveis.
fonte
O cabeçalho If-Modified-Since é usado para especificar a hora em que o navegador recebeu pela última vez o recurso solicitado. O cabeçalho If-None-Match é usado para especificar a tag de entidade que o servidor emitiu com o recurso solicitado quando foi recebido pela última vez.
Das duas maneiras descritas, esses cabeçalhos são usados para oferecer suporte ao cache de conteúdo dentro do navegador e permitem que o servidor instrua o navegador a usar uma cópia em cache de um recurso, em vez de responder com o conteúdo completo do recurso se este for não é necessário.
fonte