Por que, às vezes, o conteúdo completo é retornado inalterado, enquanto If-Modified-Since é definido?

1

meus arquivos em miniatura gerados pelo php e arquivos javascript e css combinados (todos tendo suas datas de validade anc cache = public set etc) retornam o conteúdo completo algumas vezes, outras vezes eles são carregados do cache do proxy!

Este é o comentário que o redbot.org dá, às vezes:

Uma solicitação condicional If-Modified-Since retornou o conteúdo completo inalterado.

* HTTP permite que os clientes façam solicitações condicionais para ver se uma cópia que eles mantêm ainda é válida. Como essa resposta tem um cabeçalho Last-Modified, os clientes devem poder usar um cabeçalho de solicitação If-Modified-Since para validação. RED fez isso e descobriu que o recurso envia uma resposta completa mesmo que não tenha mudado , indicando que não suporta a validação Last-Modified. **

o cabeçalho do gerador de miniaturas do PHP

header ("Content-type: image/jpeg");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 404800000)." GMT");
header ("Expires: " . gmdate("D, d M Y H:i:s", time() + 2419200) . " GMT");
header ("Cache-Control: public, max-age=2419200");

htaccess

<IfModule mod_headers.c>
ExpiresActive On
ExpiresDefault M172800

##### DEFAULT EXPIRES
<FilesMatch "\.(ico|jpg|png|gif|svg|swf|css|js|fon|xml|pdf|flv)$">
    ExpiresDefault M1209600
    Header set Cache-Control "max-age=1209600, public"
</FilesMatch>

##### DYNAMIC PAGES
<FilesMatch "\.(php|cgi|pl)$">
    ExpiresDefault M7200
    Header set Cache-Control "public, max-age=7200"
</FilesMatch>

Header unset Pragma
Header unset ETag
Header unset Last-Modified
FileETag None
</IfModule>

Atualização: novas informações:

google SpeedTest dá pontuação 91/100 no topo, diz: e lista todos os arquivos exceto os arquivos gerados php que têm um conjunto de cabeçalho expire explícito ((que ainda retornam conteúdo completo! ?? ) diz:

Os seguintes recursos não possuem um validador de cache. Recursos que não especificam um validador de cache não podem ser atualizados de forma eficiente. Especifique um cabeçalho Last-Modified ou ETag para ativar a validação de cache para os seguintes recursos.

    
por Sam 14.12.2010 / 23:51

2 respostas

1

Você pode usar o Firebug e colar os cabeçalhos de resposta HTTP. Tenho a sensação de que, embora em seu código você esteja definindo o controle de cache como Public, o Apache está ignorando que, para o tipo Php File, você está definindo o Cache-Control como privado.

Uma coisa que você pode fazer é remover as configurações de cache das Páginas Dinâmicas da configuração do Apache. Isso deve corrigir o problema porque um proxy não armazena em cache uma resposta sem os cabeçalhos corretos.

EDITAR

Oi Sam, Revisitando sua pergunta, encontrei a solução para o problema. O seguinte fragmento de código parece ser um problema. Na saída do seu Php, o cabeçalho Last-Modified sempre muda e, quando um browser envia uma requisição 304 If modified, ele vê uma mudança e, portanto, solicita novamente esse conteúdo.

header ("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 404800000)." GMT");

Desativar Last-Modified e ETags do seu conteúdo para acelerar o site. Este site oferece algumas dicas excelentes também.
link

    
por 15.12.2010 / 05:16
0

Eu adicionei o seguinte código no meu arquivo htaccess quando link no Chrome eu obtive o cache do navegador Leverage, que agora está resolvido, mas agora erro de Especifique um validador de cache, como fazer isso eu já adicionei controles de cache, abaixo está o código

<"ifModule mod_gzip.c>

  mod_gzip_on Yes

  mod_gzip_dechunk Yes

  mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$

  mod_gzip_item_include handler ^cgi-script$

  mod_gzip_item_include mime ^text/.*

  mod_gzip_item_include mime ^application/x-javascript.*

  mod_gzip_item_exclude mime ^image/.*

  mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

<"/ifModule>

<"ifModule mod_expires.c>

  ExpiresActive On

  ExpiresDefault "access plus 1 seconds"

  ExpiresByType text/html "access plus 1 seconds"

  ExpiresByType image/gif "access plus 2592000 seconds"

  ExpiresByType image/jpeg "access plus 2592000 seconds"

  ExpiresByType image/png "access plus 2592000 seconds"

  ExpiresByType text/css "access plus 604800 seconds"

  ExpiresByType application/x-javascript "access plus 216000 seconds"

<"/ifModule>

<"ifModule mod_headers.c>

  <"filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">

    Header set Cache-Control "max-age=2592000, public"

  <"/filesMatch>

  <"filesMatch "\\.(css)$">

    Header set Cache-Control "max-age=604800, public"
  <"/filesMatch>
  <"filesMatch "\\.(js)$">

    Header set Cache-Control "max-age=216000, private"

  <"/filesMatch>

  <"filesMatch "\\.(xml|txt)$">

    Header set Cache-Control "max-age=216000, public, must-revalidate"

  <"/filesMatch>

  <"filesMatch "\\.(html|htm|php)$">

    Header set Cache-Control "max-age=1, private, must-revalidate"

  <"/filesMatch>

<"/ifModule>

<"ifModule mod_headers.c>

  Header unset ETag

<"/ifModule>

FileETag None

<"ifModule mod_headers.c>

  Header unset Last-Modified

<"/ifModule>
    
por 16.08.2011 / 10:36