Câu hỏi của tôi là về cách trả lời HTTP 304 "Không được sửa đổi" khi tôi nhận được cả hai nếu không khớp và nếu được sửa đổi- kể từ khi yêu cầu proxy/ứng dụng khách.HTTP if-none-match và if-modified-since và 304 clarification trong PHP
Từ RFC 2616 secttion 14,26 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26):
Nếu không có trận đấu thẻ thực thể, sau đó máy chủ có thể thực hiện các yêu cầu phương pháp như If-None-Match tiêu đề lĩnh vực không tồn tại, nhưng PHẢI cũng bỏ qua bất kỳ tiêu đề If-Modified-Since trường nào trong yêu cầu. Tức là, nếu không có thẻ tổ chức nào phù hợp thì máy chủ PHẢI KHÔNG trả lại phản hồi 304 (Không được sửa đổi) .
Tôi không chắc chắn để hiểu tuyên bố này ...
- "Nếu không có trận đấu thẻ thực thể" trong PHP Họ nói về
$_SERVER['HTTP_IF_NONE_MATCH']
vs ETags của tôi rằng tôi đã gửi trước đó? - Nếu tôi hiểu chính xác tuyên bố này, ngay khi không có thẻ ET được liệt kê trong số
$_SERVER['HTTP_IF_NONE_MATCH']
khớp với thẻ ET của tôi, tôi sẽ ngừng tất cả xác minh và phục vụ trang bình thường.
Bất kỳ ai cũng có thể dịch phần RFC này thành mã giả (hoặc mã PHP) và/hoặc trả lời 2 điểm trên của tôi?
CHỈNH SỬA 1: Cảm ơn bạn St.Woland cho câu trả lời của bạn. bạn (hoặc bất cứ ai khác) có thể cho tôi biết nếu tôi đúng vào những 6 điểm:
Định dạng của
$_SERVER['HTTP_IF_NONE_MATCH']
có thể là:a) Nếu-Không-Khớp: "xyzzy", "r2d2xxxx", "c3piozzzz"
b) Nếu-Không-Khớp: "xyzzy"
và KHÔNG:
c) Nếu-Không-Khớp: "xyzzy, r2 d2xxxx, c3piozzzz "
Nếu
!array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)
, anyTagMatched() trả về NULL.Ngay sau khi một ETag trong
$_SERVER['HTTP_IF_NONE_MATCH']
khớp với tài liệu ETag của tôi, anyTagMatched() trả về TRUE.Nếu không có Etags nào trong
$_SERVER['HTTP_IF_NONE_MATCH']
khớp với tài liệu ETag của tôi,anyTagMatched()
trả về FALSE.Nếu
$_SERVER['HTTP_IF_MODIFIED_SINCE']
được đặt và khớp với tài liệu "sửa đổi lần cuối" ngàyisExpired()
trả về FALSE, nếu không sẽ trả về TRUE.Ngay sau khi
anyTagMatched()
trả về TRUE, tôi phát hành 304. Nếu anyTagMatched() trả về NULL vàisExpired()
trả về FALSE tôi có thể phát hành 304.Trong bất kỳ tình huống nào khác, tôi phục vụ trang của mình như bình thường (tôi cũng phát hành các tiêu đề Cập nhật lần cuối và Thay đổi ETAG mới nhất).
Hãy xem tại địa chỉ: - http://stackoverflow.com/questions/2000715/answering-httpifmodifiedsince-and-httpifnonematch-in-php - http://stackoverflow.com/questions/1583740/304- not-modified-and-front-end-caching –
Theo định nghĩa, một giá trị không được trích dẫn không hợp lệ (xem http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11). – Gumbo
Điều tuyệt vời cần biết, tôi nên tìm hiểu để đọc các định nghĩa trường trong RFC! Điểm "1-C" vẫn không hợp lệ? – AlexV