2012-03-16 15 views
15

używam Google Chrome i zauważyłem, że za każdym razem robię żądanie XHR otrzymuję następujące nagłówki wprowadzone na życzenie:jQuery XmlHttpRequest Cache-Control ignorowane

Cache-Control: no-cache 
Pragma: no-cache 

Jeśli czytasz na spec http://www.w3.org/TR/XMLHttpRequest/ mówi następujących

Jeśli aplikacja kliencka realizuje cache HTTP powinna być uznawana nagłówki cache-Control w nagłówkach żądania autor (np cache-Control: no-cache omija cache). Nie może wysyłać nagłówków żądania Cache-Control lub Pragma automatycznie, chyba że użytkownik końcowy wyraźnie zażąda takiego zachowania (np. Poprzez ponowne załadowanie strony).

Dobrze usiłuję następujące:

$.ajax(myUrl, { 
    type: 'get', 
    dataType: 'json' 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=200' 
    } 
    }) 

Jak widać jestem jawnie ustawienie nagłówka Cache-Control, w nadziei na uzyskanie pamięci podręcznej kopię mojego zasobu. Cóż Chrome wydaje się ignorować nagłówek Cache-Control.

Czy podczas wysyłania żądania XHR nie można wysłać nagłówka Cache-Control: no-cache?

Odpowiedz

46

To był głupi błąd. Miałem Narzędzia programistyczne ustawione na "Wyłącz pamięć podręczną". Dlatego zawsze dodawałem nagłówek kontrolki pamięci podręcznej. Jeśli tak się stanie, upewnij się, że pole nie jest zaznaczone.

Raul

+1

Tak, pamiętaj, że Firebug ma również "Wyłącz pamięć podręczną przeglądarki" w menu "Sieć". Ja też zostałem ukąszony przez to. – harpo

+0

Próbuję dowiedzieć się, dlaczego funkcja native fetch() nie zwracała danych z pamięci podręcznej, nawet jeśli nagłówki Cache-Control były poprawnie ustawione przez serwer. Dziękuję za pomoc w naprawieniu tego niedopatrzenia, doprowadzało mnie to do szału. –

+0

Spędziłem tak długo próbując to wyśledzić. Dziękuję Ci! –

3

Właśnie przetestowałem to i twój kod działa poprawnie, z wyjątkiem brakującego przecinka.

Otwórz zakładkę sieć, a następnie spróbuj to w konsoli na tej stronie:

$.ajax('http://stackoverflow.com/', { 
    type: 'get', 
    dataType: 'json', 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=123' 
    } 
}) 

Sprawdź karta sieciowa ponownie kliknij wniosek przed chwilą, a następnie kliknij zakładkę „nagłówki”. Zobaczysz, że żądanie zostało wysłane z podanym nagłówkiem Cache-Control.

+0

Tak, przepraszam. To była moja wina. Powinienem był sprawdzić narzędzia programistyczne, aby upewnić się, że buforowanie nie jest wyłączone. – HaxElit