Pergunta

O que poderia ser a diferença entre se-uma vez modificado e se-None-Match? Tenho a sensação de que, se-nenhum-match é usado para arquivos enquanto se-Modified-Since é usado para páginas?

Foi útil?

Solução

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 como ele é gerado no servidor, uma ou outra pergunta ( "isso foi modificado desde que ...?" / "Que isso ainda corresponder a esse ETag?") Pode ser mais fácil de resposta .

Exemplos:

  • Se você está servindo arquivos, usando mtime do arquivo como a data Last-Modified é a solução mais simples.
  • Se você está servindo uma página dinâmica web construído a partir de uma série de consultas SQL, verificando se os dados retornados por qualquer dessas consultas mudou pode ser impraticável (a menos que todos eles têm algum tipo de "última modificação" da coluna) . Neste caso, utilizando, por exemplo um hash MD5 do conteúdo da página como o ETag será muito mais fácil.
    OTOH, isso significa que você ainda tem que gerar a página inteira no servidor, mesmo para um GET condicional. Descobrir o que exatamente tem de ir para o ETag (chaves primárias, números de revisão, etc ...) você pode economizar muito tempo aqui.

Veja estes links para obter mais detalhes sobre o tema:

Outras dicas

If-Modified-Since é comparado com o Last-Modified enquanto If-None-Match é comparado com ETag . Ambos Modified-Since e ETag pode ser usado para identificar uma variante específica de um recurso.

Mas a comparação de If-Modified-Since para Last-Modified dá-lhe a informação se o cache variante é mais velho ou mais recente enquanto a comparação de If-None-Match para ETag apenas lhe dá a informação se tanto são idênticas ou não. Além disso fazer a maioria dos geradores ETag incluir as informações do sistema específico inode então mover um arquivo para uma diferente unidade pode mudar o ETag também.

valor Timestamp usado em Last-Modified / If-Modified-Since tem precisão limitada - um segundo e que simplesmente não é suficiente para uma rápida mudança de conteúdo, como, por exemplo, a aplicação Web-chat, onde mais de uma mensagem pode ser enviada em determinado segundo. ETag / If-None-Match pode ajudar a resolver esse problema.

Como se afirma no melhores práticas do Google:

É importante especificar um dos Expira ou Cache-Control max-idade, e um dos Last-Modified ou ETag, para todos os recursos armazenáveis. É redundante especificar Expira e Cache-Control:. Max-idade, ou para especificar ambos Last-Modified e ETag

https://developers.google.com/speed/docs/best-practices/caching

If-Modified-Since usa uma data , enquanto If-None-Match usa um ETag . Eles podem ser usados ??para "páginas" (ou seja, HTML) e outros arquivos.

A menos que indicado como fraco pelo servidor, um ETag é considerado um validador forte, e pode assim ser utilizadas para satisfazer um pedido variou condicional. No entanto, ETags gerados mais automaticamente apresentam dificuldades em situações de farm de servidores, uma vez que eles costumam usar informações inode e / ou um contador persistente único. Na prática, eu encontrei o cabeçalho da última modificação para ser suficiente para conteúdo bastante estática, por exemplo, servindo conteúdo estático protegida, desde o tempo de gravação do arquivo faz um razoavelmente bom validador.

O ETag é de longe o mais flexível. clientes conformes sejam obrigados a enviar o ETag em uma solicitação condicional, enquanto que deve enviar ambos se disponível.

O If-Modified-Since cabeçalho é usado para especificar o momento em que o navegador passado recebeu o recurso solicitado. O If-None-Match cabeçalho é usado para especificar a tag entidade que o servidor emitido com o recurso solicitado quando foi passado recebeu.

Nas duas maneiras descritas, esses cabeçalhos são usados ??para cache de suporte de conteúdo de dentro do navegador, e eles permitem que o servidor para instruir o navegador para utilizar uma cópia em cache de um recurso, em vez de responder com todo o conteúdo do recurso Se isso não é necessário.

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