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.
Respostas:
Em relação às diferenças entre Last-Modified/If-Modified-Sincee 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:
mtimecomo a Last-Modifieddata é a solução mais simples.ETagserá muito mais fácil. Veja estes links para mais detalhes sobre o assunto:
If-Modified-Sinceé comparado ao Last-Modifiedenquanto If-None-Matché comparado a ETag. Ambos Modified-Sincee ETagpodem ser usados para identificar uma variante específica de um recurso.
Mas a comparação de If-Modified-Sinceto Last-Modifiedfornece a informação se a variante em cache é mais antiga ou mais recente, enquanto a comparação de If-None-Matchto ETagfornece apenas a informação se ambas são idênticas ou não. Além disso, a maioria dos ETaggeradores inclui as informações do inode específico do sistema, portanto, mover um arquivo para uma unidade diferente pode alterar o ETagtambém.
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.
Conforme declarado nas práticas recomendadas do Google:
É importante especificar um entre Expires ou Cache-Control max-age e um entre Last-Modified ou ETag, para todos os recursos armazenáveis em cache. É redundante especificar Expires e Cache-Control: max-age ou especificar Last-Modified e ETag.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modifiedcom ETag(ou, do lado useragent, If-Modified-Sincecom If-None-Match) é mencionada. Da mesma forma, a especificação W3 não o restringe. Diz para não usar If-Modified-Sincecom If-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.
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.
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.