2012-04-25 30 views
113

Tôi đọc về pragma tiêu đề trên Wikipedia mà nói:Sự khác biệt giữa tiêu đề kiểm soát Pragma và Cache?

"Các pragma: lĩnh vực tiêu đề no-cache là một HTTP/1.0 tiêu đề dành cho sử dụng trong các yêu cầu Đây là một phương tiện cho trình duyệt để. thông báo cho máy chủ và bất kỳ bộ đệm trung gian nào mà nó muốn có phiên bản mới của tài nguyên, không cho máy chủ thông báo cho trình duyệt không lưu vào bộ nhớ cache tài nguyên. Một số đại lý người dùng chú ý đến tiêu đề này trong phản hồi, nhưng HTTP /1.1 RFC đặc biệt cảnh báo chống lại việc dựa vào hành vi này. "

Nhưng tôi chưa hiểu nó làm gì? Sự khác biệt giữa tiêu đề Cache-Control có giá trị là no-cachePragma có giá trị nào cũng là no-cache?

Trả lời

132

Pragma là triển khai HTTP/1.0 và cache-control là việc triển khai HTTP/1.1 của cùng một khái niệm. Cả hai đều có nghĩa là để ngăn chặn các khách hàng từ bộ nhớ đệm phản ứng. Khách hàng cũ hơn có thể không hỗ trợ HTTP/1.1, đó là lý do tại sao tiêu đề đó vẫn được sử dụng.

+22

Mặc dù câu trả lời của cnst dưới đây phức tạp hơn nhiều, nhưng nó cũng chính xác hơn theo đặc điểm kỹ thuật. 'Pragma: no-cache' được dự định chỉ được sử dụng trong các yêu cầu (có nghĩa là" Tôi muốn bản gốc, không phải là bản sao được lưu trong bộ nhớ cache ") và hành vi của nó không được chỉ định cho các câu trả lời. – clime

+4

'Cache-Control: no-cache' có cùng ý nghĩa với các yêu cầu nhưng thực sự cũng được định nghĩa cho các câu trả lời, có nghĩa là" Nếu bạn muốn sử dụng bản sao lưu trong bộ nhớ cache này trong tương lai, trước tiên bạn phải kiểm tra với tôi rằng cập nhật (nghĩa là thực hiện xác nhận lại) ". – clime

+1

Đó là để kiểm soát bộ nhớ cache, nó không phải là CHỈ để ngăn chặn bộ nhớ cache, nó cũng có thể được sử dụng để nói "Bạn có thể cache này." .... –

75

Không có sự khác biệt, ngoại trừ Pragma chỉ được xác định là có thể áp dụng cho các yêu cầu của khách hàng, trong khi Cache-Control có thể được sử dụng bởi cả yêu cầu của khách hàng và trả lời của máy chủ.

Vì vậy, theo như tiêu chuẩn đi, chúng chỉ có thể được so sánh từ quan điểm của khách hàng thực hiện một yêu cầu và máy chủ nhận được yêu cầu từ khách hàng. Các http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 xác định kịch bản như sau:

HTTP/1.1 cache NÊN điều trị "pragma: no-cache" như nếu khách hàng có gửi "Cache-Control: no-cache". Không có chỉ thị Pragma mới nào được xác định trong HTTP.

Note: because the meaning of "Pragma: no-cache as a response 
    header field is not actually specified, it does not provide a 
    reliable replacement for "Cache-Control: no-cache" in a response 

Con đường tôi sẽ đọc nội dung trên:

  • nếu bạn đang viết một khách hàng và cần no-cache:

    • chỉ cần sử dụng Pragma: no-cache trong các yêu cầu của bạn, vì bạn có thể không biết nếu Cache-Control được máy chủ hỗ trợ;
    • nhưng trong bài trả lời, để quyết định về việc có nên bộ nhớ cache, kiểm tra Cache-Control
  • nếu bạn đang viết một máy chủ:

    • trong các yêu cầu phân tích từ các khách hàng, kiểm tra Cache-Control; nếu không tìm thấy, hãy kiểm tra Pragma: no-cache và thực hiện logic Cache-Control: no-cache;
    • trả lời, cung cấp Cache-Control.

Tất nhiên, thực tế có thể khác với những gì được viết hoặc ngụ ý trong RFC!

+4

Nếu tiêu đề có cả hai? 'Cache-Control: max-age = 86400' và ' Pragma: no-cache'? Cái nào sau đó sẽ được các trình duyệt hiện đại tôn vinh? – PKHunter

+2

@PKHunter, tại sao bạn sẽ quan tâm theo cách nó đi nếu hành vi là không xác định? Nếu bạn chịu trách nhiệm về máy chủ, rõ ràng bạn có thể làm tốt hơn là đưa ra thông tin gây hiểu nhầm cho khách hàng. Ngoài ra, như được chỉ ra trong câu trả lời của tôi, 'Pragma: no-cache' chỉ được định nghĩa cho các yêu cầu từ trình duyệt, và do đó sẽ hoàn toàn không hợp lệ và không xác định trong các thư trả lời từ máy chủ đến trình duyệt, mọi trình duyệt (dù là hiện đại hay không) nên bỏ qua một tiêu đề như vậy trong bất kỳ thư trả lời nào mà nó có thể nhận được. – cnst

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