HTTP if-none-match i if-modified-since i wyjaśnienie 304 w PHP
Moje pytanie dotyczy tego, jak odpowiedzieć HTTP 304 „Not Modified”, gdy odbieramobie if-none-match i if-modified-from z żądania proxy / klienta.
Z RFC 2616 secttion 14.26 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26 ):
Jeśli żaden z tagów encji nie pasuje, serwer MOŻE wykonać żądaną metodę, tak jakby pole nagłówka If-None-Match nie istniało, ale MUSI również zignorować dowolne pole nagłówka If-Modified-Since w żądaniu. Oznacza to, że jeśli żadne znaczniki nie pasują, serwer NIE MOŻE zwrócić odpowiedzi 304 (niezmodyfikowanej).
Nie jestem pewien, czy zrozumiem to stwierdzenie ...
„Jeśli żaden z tagów encji nie pasuje” w PHP, mówią o nim$_SERVER['HTTP_IF_NONE_MATCH']
a moje ETagi, które wysłałem wcześniej?Jeśli dobrze rozumiem to stwierdzenie, tak szybko, jak żaden z ETagów wymienionych w$_SERVER['HTTP_IF_NONE_MATCH']
dopasuj moje ETags, zatrzymuję wszystkie weryfikacje i normalnie obsługuję stronę.Każdy może przetłumaczyć tę część RFC w pseudo-kodzie (lub kodzie PHP) i / lub odpowiedzieć na moje 2 punkty powyżej?
EDYTUJ 1: Dziękuję St.Woland za odpowiedź. Czy możesz (lub ktokolwiek inny) powiedzieć mi, czy mam rację w tych 6 punktach:
Format$_SERVER['HTTP_IF_NONE_MATCH']
może być:
a) If-None-Match: „xyzzy”, „r2d2xxxx”, „c3piozzzz”
b) If-None-Match: „xyzzy”
i nie:
c) If-None-Match: „xyzzy, r2d2xxxx, c3piozzzz”
Jeśli!array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)
, anyTagMatched () zwraca NULL.
Jak tylko ETag w$_SERVER['HTTP_IF_NONE_MATCH']
dopasuj mój dokument ETag, anyTagMatched () zwraca TRUE.
Jeśli żaden z Etagów nie jest włączony$_SERVER['HTTP_IF_NONE_MATCH']
pasują do mojego dokumentu ETag,anyTagMatched()
zwraca FAŁSZ.
Jeśli$_SERVER['HTTP_IF_MODIFIED_SINCE']
jest ustawiony i pasuje do mojego dokumentu „data ostatniej modyfikacji”isExpired()
zwraca FAŁSZ, w przeciwnym razie zwraca PRAWDA.
Tak szybko jakanyTagMatched()
zwraca TRUE, wydaję 304. Jeśli anyTagMatched () zwróci NULL iisExpired()
zwrócono FALSE Mogę wydać 304. W każdej innej sytuacji obsługuję moją stronę jako normalną (wystawiam również aktualne nagłówki Last-Modified i ETag).