Configuração do Etag com vários servidores apache ou CDN / Como o Google faz ETags?

5

Eu tenho um aplicativo que é servido de dois servidores apache2 e quero configurar os ETags em conteúdo estático. No futuro, também gostaria de usar um CDN. Eu vejo que isso deve ser um problema porque as informações Etag serão diferentes de servidor para servidor ...

The ETag format for Apache 1.3 and 2.x is inode-size-timestamp. Although a given file may reside in the same directory across multiple servers, and have the same file size, permissions, timestamp, etc., its inode is different from one server to the next.

Então, se você estiver usando mais de um servidor da Web para hospedar seu aplicativo (como 90% das aplicações web que você usa todos os dias), isso deve ser um problema. No entanto, vejo o Google usa Etags, e certamente eles usam vários servidores e CDN e cache de borda, etc ... Eu recebo uma resposta 304 para qualquer conteúdo do Google em cache. Como eles fazem isso? Como você contorna o problema de vários servidores? Existe uma maneira de configurar isso com o Apache?

    
por perrierism 09.03.2010 / 00:25

2 respostas

2

Você pode configurar o Apache para que ele não use o inode como parte do hash. Veja a diretiva FileETag .

    
por 09.03.2010 / 00:59
5

A atual prática é remover ETags , precisamente pelas razões dadas na publicação dos OPs. Em vez disso, você pode confiar nos outros cabeçalhos de cache, ou seja, Cache-Control e Expires, e armazenar recursos incondicionalmente (suponha que o conteúdo estático em uma determinada URL seja imutável, portanto, quando o conteúdo tiver que mudar, você também receberá um novo URL). Steve Souders criou o caso para isso enquanto estava no Yahoo !, e publicou um bom livro sobre essa e outras melhorias de desempenho.

Você pode usar ETags se quiser; você só precisa cuidar bem de que todos os servidores estejam exatamente iguais e que os ETags sejam gerados a partir de algo independente da máquina. Uma maneira de fazer isso é gerar ETags a partir de um hash do conteúdo do arquivo ou um hash de (nome do arquivo + tamanho), como James escreveu.

Meu palpite é que, sem nenhuma evidência, o Google não está usando uma CDN de terceiros, eles estão apenas usando seus próprios servidores em seus muitos datacenters em todo o mundo. Em seguida, eles mantêm a configuração de seus servidores da Web em todo o mundo e usam apenas algo como (última modificação do tempo + tamanho do arquivo) como base de seu ETag.

Para o resto de nós, não usar ETags é IMHO mais simples e melhor.

    
por 17.03.2010 / 17:46