2010-01-28 35 views
21

Tôi hiện đang xây dựng một tập lệnh PHP sẽ trả lời HTTP "304 Not Modified" khi được yêu cầu.HTTP If-None-Match và If-Match

(Xem question #2086712 cho những gì tôi làm cho đến thời điểm này).

Hiện nay tôi trả lời như sau:

  • If-Modified-Since
  • Nếu-Không-Khớp

Nhưng tôi phát hiện ra rằng 3 tiêu đề hơn có thể kích hoạt một "GET có điều kiện "(Xem http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3):

  • Nếu so khớp
  • If-Unmodified-Since
  • Nếu cấp

cuối cùng 2 có vẻ irrevelent vào hệ thống bộ nhớ đệm của tôi (họ dường như được sử dụng khi nối lại tải "lớn") nhưng tôi đã không tìm thấy nếu "If- Match "có thể được sử dụng trong hệ thống của tôi.

Liệu "If-Match" có được sử dụng trong proxy hoặc trình duyệt web cho nội dung trang "thông thường" không? "If-Match" khác với "If-None-Match" như thế nào?

Tôi có nên hỗ trợ những người 3 hoặc chỉ một số người trong số họ không? Bất kỳ sự trợ giúp nào!

Trả lời

36

If-Match

Máy chủ PHẢI trả về một 412 (kiện tiên quyết Không thành công) Đáp lại, nếu:

  • không ai trong số các trận đấu thẻ tổ chức nào,
  • hoặc "*" được đưa ra và không có hiện tại thực thể tồn tại

If-Match nên bỏ qua, nếu:

  • bất kỳ thẻ thực thể phù hợp
  • hoặc nếu kết quả yêu cầu trong bất cứ điều gì khác hơn là một tình trạng 2xx hoặc 412 (không If-Match)
  • hoặc nếu "*" được đưa ra và bất cứ thực thể hiện tại tồn tại cho tài nguyên

Kết luận trên nếu trận đấu:

  • ý nghĩa của "if-Match: *" là phương pháp nên được thực hiện nếu các đại diện bởi các máy chủ gốc được lựa chọn ... tồn tại, và không được thực hiện nếu biểu diễn không tồn tại.

If-Match in RFC2616

If-Unmodified-Since

Máy chủ PHẢI trả về một 412 (kiện tiên quyết Không thành công) Đáp lại, nếu:

  • biến thể yêu cầu đã bị thay đổi kể từ thời gian quy định

Nếu không sửa đổi-Từ nên bỏ qua, nếu

  • tài nguyên yêu cầu chưa được sửa đổi kể từ thời gian quy định trong lĩnh vực này
  • hoặc yêu cầu bình thường (tức là, nếu không có sự If-Unmodified-Since) sẽ cho kết quả trong bất cứ điều gì khác hơn là một tình trạng 2xx hoặc 412
  • hoặc ngày quy định là không hợp lệ

If-Unmodified-Since in RFC2616

Nếu cấp

0.123.

Không chính thức, ý nghĩa của nó là 'nếu thực thể không thay đổi, hãy gửi cho tôi (các) phần mà tôi bị thiếu; cách khác, gửi cho tôi toàn bộ thực thể mới'

Điều kiện tiên quyết:

  • Các If-Range tiêu đề NÊN chỉ được sử dụng cùng với một tiêu đề Range, và PHẢI bị bỏ qua nếu yêu cầu làm không bao gồm tiêu đề Range hoặc nếu máy chủ không hỗ trợ op phụ eration.

Máy chủ NÊN cung cấp phản hồi 206 (một phần nội dung), nếu tiêu đề If-Range khớp với thẻ thực thể hiện tại của thực thể. Nếu không, máy chủ NÊN trả lại toàn bộ thực thể bằng cách sử dụng phản hồi 200 (OK).

If-Range in RFC2616

kết quả Undefined

Có sự kết hợp sau đây của tiêu đề dẫn đến một kết quả không xác định:

  • If-Modified-Since If-Match
  • If-Modified -Số Nếu không sửa đổi kể từ
  • Nếu-Không-Khớp If-Match
  • Nếu-Không-Khớp If-Unmodified-Since

Những quy định này đã được phân hủy từ những người sau đây (có thể được tìm thấy trong RFC2616) :

  • If-Match (If-None-Match hoặc If-Modified-Since)
  • If-Modifi ed-Since (If-Match hoặc If-Unmodified-Since)
  • Nếu-Không-Khớp (If-Match hoặc If-Unmodified-Since)
  • If-Unmodified- Kể từ (If-None-Match hoặc If-Modified-Since)
+4

có tình huống mà If-Match, If-Unmodified-Since hoặc Nếu cấp có thể kích hoạt một HTTP 304 "Không thay đổi" câu trả lời? – AlexV

+5

Không, chỉ được phép cho 'If-None-Match' và' If-Modified-Since'. http://en.wikipedia.org/wiki/List_of_HTTP_headers –

+0

Tuyệt vời, một lần nữa bạn có lời cảm ơn của tôi! – AlexV

Các vấn đề liên quan