Qual é a diferença entre o código de status HTTP 200 (cache) versus o código de status 304?

Estou usando o plug-in “Velocidade da página” do Google para o Firefox acessar meu site.

Alguns dos componentes da minha página são indicados como status HTTP:

200 200 (cache) 304

Por “velocidade da página” do Google.

O que estou confuso é a diferença entre 200 (cache) e 304.

Eu atualizei a página várias vezes (mas não limpei meu cache) e sempre parece que o meu favicon.ico e algumas imagens são status = 200 (cache), enquanto algumas outras imagens são http status 304.

Eu não entendo porque a diferença.

ATUALIZAÇÃO :

Usando o Google “Page Speed”, recebo um “200 (cache)” para http://example.com/favicon.ico e http://cdn.example.com/js/ga.js

Mas recebo um status http “304” para http://cdn.example.com/js/combined.min.js

Eu não entendo porque eu tenho dois arquivos JavaScript localizados no mesmo diretório / js /, um retornando um status http 304 e o outro retornando um código de status 200 (cache).

Os itens com o código “200 (cache)” foram preenchidos diretamente do cache do navegador, o que significa que os pedidos originais dos itens foram retornados com headers indicando que o navegador poderia armazená-los em cache (por exemplo, Expires data futura ou Cache-Control: max-age headers de Cache-Control: max-age ) e que, no momento em que você acionou a nova solicitação, esses objects armazenados em cache ainda estavam armazenados no cache local e ainda não haviam expirado.

304s, por outro lado, são a resposta do servidor depois que o navegador verifica se um arquivo foi modificado desde a última versão que ele armazenou em cache (a resposta é “não”).

Para obter o desempenho ideal da Web, é melhor definir um header de Expires: futura Expires: ou Cache-Control: max-age para todos os ativos e, em seguida, quando um ativo precisar ser alterado, alterando o nome real do recurso ou acrescentando uma string de versão para solicitações desse ativo. Isso elimina a necessidade de qualquer solicitação a ser feita, a menos que o ativo tenha mudado definitivamente da versão no cache (não é necessário que a resposta seja 304). Yahoo! tem mais diretrizes de desempenho relacionadas ao cache , o que inclui garantir que as ETags estejam configuradas corretamente.

200 (cache) significa que o Firefox está simplesmente usando a versão em cache local. Este é o mais rápido porque não é feito nenhum pedido ao servidor da Web.

304 significa que o Firefox está enviando uma solicitação condicional “If-Modified-Since” ao servidor da Web. Se o arquivo não tiver sido atualizado desde a data enviada pelo navegador, o servidor da Web retornará uma resposta 304, que essencialmente instrui o Firefox a usar sua versão em cache. Não é tão rápido quanto 200 (cache) porque a solicitação ainda é enviada ao servidor Web, mas o servidor não precisa enviar o conteúdo do arquivo.

Para sua última pergunta, não sei por que os dois arquivos JavaScript no mesmo diretório estão retornando resultados diferentes.

Isso me jogou por um longo tempo também. A primeira coisa que eu verificaria é que você não está recarregando a página clicando no botão de atualização, que sempre emitirá uma solicitação condicional para resources e retornará 304s para muitos dos elementos da página. Em vez disso, vá até a barra de URL, selecione a página e pressione Enter como se você tivesse typescript a mesma URL novamente, o que lhe dará um melhor indicador do que está sendo armazenado corretamente. Este artigo faz um ótimo trabalho explicando a diferença entre solicitações condicionais e incondicionais e como o botão de atualização as afeta: http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about- condicional-http-requests-e-refresh-button.aspx

O HTTP 304 é “não modificado”. Seu servidor web está basicamente dizendo ao navegador “este arquivo não foi alterado desde a última vez que você o solicitou”. Considerando que um HTTP 200 está dizendo ao navegador “aqui está uma resposta bem sucedida” – que deve ser retornada quando é a primeira vez que seu navegador está acessando o arquivo ou a primeira vez que uma cópia modificada está sendo acessada.

Para mais informações sobre os códigos de status, consulte http://en.wikipedia.org/wiki/List_of_HTTP_status_codes .

304 não é modificado. Eu recebo muito este código em meus arquivos de mídia como css e js.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5

Para sua última pergunta, por quê? Vou tentar explicar com o que sei

Uma breve explicação desses três códigos de status em termos leigos.

  • 200 – sucesso (solicitações de navegador e obter arquivo do servidor)

Se o armazenamento em cache estiver ativado no servidor

  • 200 (a partir do cache de memory) – arquivo encontrado no navegador, então o navegador não vai pedido do servidor
  • 304 – navegador solicita um arquivo, mas é rejeitado pelo servidor

Para alguns arquivos, o navegador está decidindo solicitar do servidor e, para alguns, está decidindo ler arquivos armazenados (armazenados em cache). Por que é isso ? Cada arquivo tem uma data de expiração, então

Se um arquivo não expirou, o navegador usará do cache (cache 200).

Se o arquivo expirou, o navegador solicita servidor para um arquivo. Arquivo de verificação do servidor nos dois locais (navegador e servidor). Se o mesmo arquivo for encontrado, o servidor recusará a solicitação. Conforme protocolo, o navegador usa o arquivo existente.

olhe para esta configuração nginx

 location / { add_header Cache-Control must-revalidate; expires 60; etag on; ... } 

Aqui, a expiração é configurada para 60 segundos, portanto, todos os arquivos estáticos são armazenados em cache por 60 segundos. Então, se você solicitar um arquivo novamente dentro de 60 segundos, o navegador irá ler a partir da memory (200 de memory). Se você solicitar após 60 segundos, o navegador solicitará o servidor (304).

Eu assumi que o arquivo não é alterado após 60 segundos, nesse caso, você obteria 200 (ou seja, o arquivo atualizado será buscado no servidor).

Portanto, se os servidores estiverem configurados com headers de expiração e armazenamento em cache diferentes (políticas), o status poderá ser diferente.

No seu caso você está usando o cdn, o principal objective do cdn é alta disponibilidade e entrega rápida. Portanto, eles usam vários servidores. Mesmo que pareça que os arquivos estão no mesmo diretório, o cdn pode usar vários servidores para fornecer conteúdo, se esses servidores tiverem configurações diferentes. Então, esse status pode mudar. Espero que ajude.