Czytałem o nagłówku Pragma na Wikipedii, który mówi:
„Pole nagłówka Pragma: no-cache to nagłówek HTTP / 1.0 przeznaczony do użycia w żądaniach. Jest to sposób, w jaki przeglądarka informuje serwer i wszelkie pośrednie pamięci podręczne, że potrzebuje nowej wersji zasobu, a nie dla serwera nakazać przeglądarce, aby nie buforowała zasobu. Niektóre programy użytkownika zwracają uwagę na ten nagłówek w odpowiedziach, ale protokół HTTP / 1.1 RFC wyraźnie ostrzega przed poleganiem na tym zachowaniu. "
Ale nie rozumiem, co to robi? Jaka jest różnica między Cache-Control
nagłówkiem, którego wartość jest, no-cache
a Pragma
którego wartością jest również no-cache
?
źródło
Pragma: no-cache
ma być używany tylko w żądaniach (co oznacza „Chcę mieć oryginał, a nie kopię w pamięci podręcznej”), a jego zachowanie nie jest określone dla odpowiedzi.Cache-Control: no-cache
ma to samo znaczenie dla żądań, ale w rzeczywistości jest również zdefiniowane dla odpowiedzi, co oznacza „Jeśli chcesz użyć kopii tego z pamięci podręcznej w przyszłości, musisz najpierw sprawdzić ze mną, czy jest aktualna (tj. przeprowadzić weryfikację)”.max-age
co nie zapobiega buforowaniu. Po prostu ustawia datę ważności ...Nie ma żadnej różnicy, z wyjątkiem tego, że
Pragma
jest zdefiniowany tylko jako mający zastosowanie do żądań klienta, podczas gdyCache-Control
może być używany zarówno przez żądania klientów, jak i odpowiedzi serwerów.Tak więc, jeśli chodzi o standardy, można je porównać tylko z punktu widzenia klienta składającego żądanie i serwera otrzymującego żądanie od klienta. Http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 definiuje w następujący scenariusz:
Tak bym przeczytał powyższe:
jeśli piszesz do klienta i potrzebujesz
no-cache
:Pragma: no-cache
w swoich żądaniach, ponieważ możesz nie wiedzieć, czyCache-Control
jest obsługiwany przez serwer;Cache-Control
jeśli piszesz serwer:
Cache-Control
; jeśli nie zostanie znaleziony, sprawdźPragma: no-cache
i wykonajCache-Control: no-cache
logikę;Cache-Control
.Oczywiście rzeczywistość może różnić się od tego, co jest napisane lub domniemane w specyfikacji RFC!
źródło
Cache-Control: max-age=86400
iPragma: no-cache
? Który z nich zostanie wówczas uhonorowany przez współczesne przeglądarki?Pragma: no-cache
jest on zdefiniowany tylko dla żądań z przeglądarki, a zatem byłby całkowicie nieważny i niezdefiniowany w odpowiedziach z serwera do przeglądarki, np. Wyobrażałbym sobie, że każda przeglądarka (nowoczesna lub nie) powinien ignorować taki nagłówek w każdej otrzymanej odpowiedzi.Jeśli jest po 1999 roku i nadal używasz Expires lub Pragma , robisz to źle.
Patrzę na Ciebie Stackoverflow:
tl; dr:
Pragma
jest starszą wersją protokołu HTTP / 1.0 i nie był potrzebny od Internet Explorera 5 lub Netscape 4.7. Chyba że spodziewasz się, że niektórzy użytkownicy będą używać IE5: możesz bezpiecznie przestać go używać.[date]
(przestarzałe - HTTP 1.0)[seconds]
Oraz żądania warunkowe:
Etag: W/“1d2e7–1648e509289”
If-None-Match: W/“1d2e7–1648e509289”
304 Not Modified
last-modified: Thu, 09 May 2019 19:15:47 GMT
If-Modified-Since: Fri, 13 Jul 2018 10:49:23 GMT
304 Not Modified
ostatnia modyfikacja: czw., 09 maja 2019 19:15:47 GMT
źródło
Pragma
. (W HTTP / 1.0 Pragma została zdefiniowana jako rozszerzalne pole dla dyrektyw określonych w implementacji dla odbiorców. Ta specyfikacja wycofuje takie rozszerzenia w celu poprawy współdziałania).