it-swarm-pt.tech

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 do Google "Page Speed" 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.

UPDATE:

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

Mas, eu 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).

189
Hank

Os itens com o código "200 (cache)" foram preenchidos diretamente do cache do navegador, o que significa que as solicitações originais dos itens foram retornadas com cabeçalhos indicando que o navegador poderia armazená-los em cache (por exemplo, cabeçalhos Expires ou Cache-Control: max-age) e no momento em que você acionou a nova solicitação, esses objetos 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 após o navegador verificar 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 cabeçalho Expires: ou Cache-Control: max-age para todos os ativos no futuro distante e, em seguida, quando um ativo precisar ser alterado, alterando o nome real do recurso ou acrescentando uma sequência de versão a solicitações de ativos. 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 há necessidade da resposta 304). Yahoo! tem mais diretrizes de desempenho relacionadas ao cache , que incluem certificar-se de que ETags estão corretamente configurados.

214
Ben Regenspan

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 basicamente instrui o Firefox a usar sua versão em cache. Não é tão rápido quanto 200 (cache) porque o pedido ainda é enviado para o 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.

61
James Lawruk

Isso me jogou por um longo tempo também. A primeira coisa que eu gostaria de verificar é que você não está recarregando a página clicando no botão Atualizar, que sempre emitirá uma solicitação condicional para recursos 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 digitado 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- informações-sobre-condicionais-http-requests-e-atualizar-button.aspx

18
Pooch

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 códigos de status, confira http://en.wikipedia.org/wiki/List_of_HTTP_status_codes .

8
richleland

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

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

2
Brandon Henry

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 memória) - arquivo encontrado no navegador, então o navegador não está indo 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 estiver expirado, 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 lerá da memória (200 de memória). 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 cabeçalhos 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 objetivo do cdn é alta disponibilidade e entrega rápida. Portanto, eles usam vários servidores. Embora 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.

1
Saahithyan Vigneswaran