Pergunta

O que é um bom método de gerar programaticamente etag para páginas da web, e é esta prática recomendada? Alguns sites recomendo transformando ETags fora, outros recomendam produzi-los manualmente, e alguns recomendam deixar as configurações padrão ativo - o que é a melhor maneira aqui

Foi útil?

Solução

ETags ajudam quando você usa algum tipo de mecanismo de cache na frente do seu sítio gerador. Browsers-se não usá-los, eles escutam "(se) modificado desde" ou "idade" estruturas de cabeçalho, afaik.

De qualquer forma, devido à sua natureza simples não é nenhum problema para fornecer uma http-header com uma ETag. Ouvi dizer que muitos servidores web simplesmente tomar o local do arquivo e o timestamp do arquivo e fazer um md5 hash sobre esses dados.

Nós, como um exemplo, construiu um simples, mas etag eficaz com o nosso software. Cada "unidade de conteúdo" (ou seja, HTML, jpegs, gifs ...) em nosso software tem um ID único e um número de versão (ou seja, um jpeg tem o id "17" ea versão "2", isso significa que ele foi alterado uma vez) . Assim, o ETag simplesmente é a cadeia "id-versão", aqui: "17-2". Com a próxima mudança seria "17-3" para que o cacher reconhece a alteração cargas a nova peça de conteúdo (uma vez) completamente e armazena em seu próprio cache.

Mas você provavelmente poderia usar o URL e um timestamp (ou seja, o timestamp do arquivo), também.

Outras dicas

recomendo gerar um hash do o conteúdo, por exemplo md5($content).
Além disso, para evitar de hash colisão, você pode querer adicionar por exemplo a identificação do elemento de conteúdo para ele (se este for o caso).

Bem ETags faz sentido quando você dependem fortemente de cache. Eles são um grande indicador para o estado de um recurso (URL por exemplo a).

Por exemplo, digamos que você use um ajax pedido para puxar as últimas observações de um usuário e você quer saber se existem novos comentários. Alterar o ETag para Alerta sua aplicação de novos conteúdos é uma forma menos dispendiosa para verificar isso.

Porque se o ETag é o mesmo, você pode manter seu cache, mas caso contrário reconstruí-lo.

ETags também fazem muito sentido com APIs RESTful.

Como para gerá-la, olhando para o especificação , eu acho que você pode fazer quase qualquer coisa que você quiser. Um timestamp, um hash, o que faz sentido para você / sua aplicação.

Eu apenas despediu-se YSlow e reclamou Etags, então eu fiz uma pequena pesquisa. A questão, de acordo com a Yahoo blogue (ver os comentários também) é que as implementações ETags padrão usa o número do arquivo inode ou nTFS número de revisão ou soemthing outra coisa igualmente específicas servidor como parte do hash. Este, ao ser rápido, basicamente impede que o mesmo arquivo que está sendo servido por 2 servidores diferentes de ter a mesma etag e parafusos até ambos os navegadores e caches jusante ou saldos de carga.

A sugestão anterior para usar um hash MD5 é uma boa, embora você tem que impedir que isso se tornar um problema de desempenho em si. A implementação do que as sugestões permanece até o leitor, embora fora de lado, parece-me que este é o tipo de coisa que o seu quadro pode ser capaz de lidar para você.

Para mim, desde que eu estou em um ambiente simples, onde o timestamp do arquivo será mais do que adequado, eu só virou-los em Apache usando FileETag none no meu arquivo .htaccess. Este cala YSlow e deve fazer as coisas caem de volta para a data da última modificação no arquivo.

Geralmente, os "sites" que desencorajam o seu uso é o Yahoo, e isso é porque alguns servidores web padrão não criar automaticamente GATE que trabalham em fazendas de servidores. (O que é correto e preciso do Yahoo com a reivindicação.)

Mas, se você tiver um único servidor web, que você está bem. Se não, você vai querer verificar-se sobre como lida com seu servidor web isso e agir de forma adequada.

Mufasa,

Yahoo (e YSlow) realmente incentivar a sua utilização, mas com a ressalva de que ETags gerados automaticamente será diferente de servidor para servidor.

Eu ainda não pode votar, então eu vou dizer que concordo com a sugestão de um hash do caminho do arquivo e timestamp (ou o nome da tabela + valor do campo principal + timestamp se a ser representado por conteúdo db).

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