Ajax - cache kezelése
Ü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...
■ 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...
cache és 304 a szerver oldaláról
Én szerver oldali cache-control headerekkel oldom meg, hogy ne tárolja el a böngésző a választ:
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.