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).

questionAnswers(1)

yourAnswerToTheQuestion