ugrás a tartalomhoz

Ajax - cache kezelése

inf · 2010. Jan. 10. (V), 16.38
Üdv.

Kíváncsi vagyok nektek milyen tapasztalataitok vannak a cache témakörben.

Én nemrég próbálkoztam js fájlok beszúrásával(sync+eval), és próbáltam kikényszeríteni, hogy ne cachelje őket a böngésző. Végül sikerült megoldani no-cache és if-modified-since request headerekkel a problémát. (Ha minden igaz.) Elég nagy kavarodás van a böngészőknél ebben a cache témában, mert 304-es header helyett 200-asat kapok, amikor a 304 mellett ugyanúgy lehetne adatot küldeni, és legalább tudnám, hogy cacheből kapom...

A periodicalUpdater-nél ti szoktátok használni a 304-et?

Még a sync+evallal kapcsolatban érdekesség, hogy localhoston rendesen megy a dolog, viszont fájlként megnyitva (file://) xml-ként akarja feldolgozni a rendszer. Erre nem találtam semmilyen megoldást...
 
1

cache és 304 a szerver oldaláról

oszi330 · 2010. Jan. 10. (V), 18.55
Szia!

Én szerver oldali cache-control headerekkel oldom meg, hogy ne tárolja el a böngésző a választ:

function nocache($mime, $charset) {
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);// HTTP/1.1
    header('Pragma: no-cache'); // HTTP/1.0
    header('Content-Type: '.$mime.'; charset='.$charset);
}
A 304-es kódot feltételes GET esetén adja vissza a szerver, ha létezik a kért dokumentum, de nem változott meg.
A GET-tel elküldi:
If-Modified-Since Tue, 01 Sep 2009 07:12:47 GMT
If-None-Match "13862-55b-e0a5f083"

A válaszban:
304 Not Modified
Date Sun, 10 Jan 2010 16:10:11 GMT
Etag "13862-55b-e0a5f083"

Így a böngésző a böngésző cache-ből fogja kiolvasni a fájlt.

Ha dinamikusak az adatok és szerver oldalon is cachelve vannak, PHP-ban meg kell vizsgálni, hogy kéréskor van-e feltételes GET header és értelmezni kell a kliens cachelési időpontját. Ha ez megvan, akkor meg lehet állapítani, hogy változott-e az adat a szerver oldali cacheben azóta, ha nem, akkor 304-es kód és a Date header, egyébként 200-as kód és adatok.

Az RFC-ben le van írva, a 10.3.5 304 Not Modified szakaszban, hogy a szabvány mit mond pontosan.