2013-06-25 7 views
8

Mam aplikację internetową, która umożliwia przeglądanie pamięci podręcznej AJAX przez długi czas. Dowiedziałem się, jak złożyć wniosek, że całkowicie pomija cache, gdy zostaną wykryte prawdopodobne modyfikacje. Ale chciałbym, aby użytkownik uruchomił odświeżanie danych.Wymuszenie żądania AJAX, aby ponownie potwierdzić pamięć podręczną z serwerem, bez ponownego ładowania.

w tym scenariuszu, chciałbym przeglądarkę aby skontaktować się z serwerem, jeśli bufor jest zablokowana ale go używać, jeśli nie jest (to znaczy, jeśli serwer odpowiada z kodem 304). Celem jest zaoszczędzenie czasu ładowania, ponieważ dane są ogromne.

Serwer obejmuje następujące nagłówki we wszystkich odpowiedzi:

Cache-Control: private, max-age=604800 
Last-Modified: ... # actual last modification date 

udało mi się rozbić pamięci podręcznej obiekt całkowicie w Chrome (nie przetestowane innych przeglądarek jeszcze) za pomocą następujących nagłówków HTTP we wniosku:

Cache-Control: max-age=0 
If-Last-Modified: Tue, 01 Jan 1970 01:00:00 +0100 

Linia If-Last-Modified to taka, która naprawdę działa. Wygląda na to, że Chrome ignoruje nagłówek Cache-Control w żądaniu.

Zauważyłem również, że użycie Cache-Control: must-revalidate w odpowiedzi serwera zmusza przeglądarkę do sprawdzenia poprawności jej pamięci podręcznej z serwerem pod kątem dla każdego żądania.

Ale czy istnieje jakaś możliwość ponownego zatwierdzenia tylko na jedno dokładne zapytanie, zadecydował klient po stronie klienta?

Zauważ, że nie jestem do tego specjalnie przywiązany przy użyciu nagłówków HTTP, więc każda inna metoda, o której nie wiedziałbym, jest mile widziana!

+0

Po prostu użyj 'If-Last-Modified' z ostatnim nagłówkiem odpowiedzi" Last-Modified ". –

+0

Próbowałem tego, a ja dostałem 304 z serwera, ale przeglądarka nie używa pamięci podręcznej do wypełnienia odpowiedzi, więc jest pusta w kodzie ... Przypuszczam, że przeglądarka nie wykazuje zainteresowania w nagłówku 'If-Last-Modified' nie został dodany. – rixo

+0

Następnie, zakładając, że samodzielnie buforujesz ostatnią odpowiedź, musisz to zrobić ręcznie, tj. Jeśli odpowiedź wynosi 200, zastąp pamięć podręczną, a jeśli odpowiedź jest równa 304, użyj starej kopii. Można go łatwo wyodrębnić. –

Odpowiedz

2

możesz dodać parametr adresu URL, którego wartość zależy od czasu, aby wyczyścić pamięć podręczną tylko dla jednego precyzyjnego żądania.

$.ajax({ 
    url:"/questions?nocache="+Date.now(), 
    "success":function(data){ 
     console.log(data); 
    } 
}); 
+1

Nie chcę całkowicie ominąć pamięci podręcznej, chcę, aby przeglądarka zapytała serwer, czy jego pamięć podręczna jest nadal ważna, i użyć go, jeśli otrzyma 304. Pamięć podręczna powinna zostać odrzucona tylko wtedy, gdy serwer odpowie 200. – rixo

Powiązane problemy