Ho aggiunto la seguente linea nel mio httpd.conf Apache: -Apache non sta inviando 304 risposta (se mod_deflate e AddOutputFilterByType è abilitato)
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/x-javascript application/json
Ho un file html (test.html) con un script di inclusione: -
<script type="text/javascript" src="/test.js"></script>
Il problema è che ogni volta che carico test.html, test.js è anche caricato con stato HTTP: 200.
La domanda è: perché i GET condizionale non è soddisfatto?
Se io commentare la riga "AddOutputFilterByType" in httpd.conf, Apache invia 304.
Se permetto AddOutputFilterByType in httpd.conf, l'intestazione di richiesta è: -
Host: optimize User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5 (.NET CLR 3.5.30729) FirePHP/0.2.4 Accept: */* Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://optimize/ Cookie: PHPSESSID=nbq6h0eeahkshkcbc6ctu2j2b4 If-Modified-Since: Tue, 19 May 2009 07:06:46 GMT If-None-Match: "2000000000717f-2c25a-46a3e8dcc2ad8"-gzip Cache-Control: max-age=0
E l'intestazione di risposta è: -
Date: Fri, 22 May 2009 07:03:40 GMT Server: Apache/2.2.9 (Win32) PHP/5.2.6 Last-Modified: Tue, 19 May 2009 07:06:46 GMT Etag: "2000000000717f-2c25a-46a3e8dcc2ad8"-gzip Accept-Ranges: bytes Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 52583 Keep-Alive: timeout=5, max=98 Connection: Keep-Alive Content-Type: application/javascript
UPDATE: ho notato, se io sono la disabilitazione ETag, funziona correttamente Voglio dire che manda 304.
FileETag None
Ma ci tengo a mantenere ETag come lo è (lo so che c'è un problema di divulgazione inode).
Hai mai trovato una soluzione alternativa? Apache 2.4 sembra fare lo stesso, inviando sempre 200 risposte per contenuti gzip – virtualeyes
Qualche ragione per cui vuoi mantenere gli ETags? Non c'è alcun reale punto di averli se si sta solo servendo contenuto statico che ha già una data 'Last-Modified' per la riconvalida. Sicuramente, la loro scelta sarebbe la soluzione più semplice e conforme a RFC per ora. –
Gli ETAG * sono * necessari *.Se si desidera sostituire il contenuto con una versione precedente (ad esempio, il file javascript che doveva essere ripristinato in una versione precedente senza un bug introdotto) e quando si ripristina la data precedente del file, un semplice confronto delle date non sarà sufficiente . –