2009-11-09 39 views
25

Hãy xem xét kịch bản sau đây:Caching Proxy với REST đã xác thực yêu cầu

  • Tôi có RESTful URL/bài báo trả về danh sách các bài
  • người dùng cung cấp thông tin của mình sử dụng tiêu đề HTTP cấp quyền trên mỗi yêu cầu
  • điều có thể thay đổi từ người dùng đến người dùng dựa trên đặc quyền của mình

Có thể sử dụng proxy bộ nhớ đệm, như Mực, cho trường hợp này? Proxy sẽ chỉ thấy URL/bài viết để nó có thể trả về danh sách các bài viết chỉ hợp lệ cho người dùng đầu tiên tạo bộ nhớ cache. Những người dùng khác yêu cầu URL/bài viết có thể xem các bài viết mà họ không có quyền truy cập, điều này không hề mong muốn.

Tôi có nên cuộn bộ nhớ cache của riêng mình hoặc một số phần mềm proxy bộ nhớ đệm có thể được định cấu hình để đặt bộ nhớ cache của nó trên tiêu đề Cấp quyền HTTP không?

Trả lời

29

Một khả năng để thử là sử dụng tiêu đề phản hồi Vary: Authorization để hướng dẫn lưu trữ xuống lưu ý cẩn thận về bộ nhớ đệm bằng cách thay đổi các tài liệu được lưu trong bộ nhớ cache dựa trên tiêu đề Authorization của yêu cầu.

Có thể bạn đã sử dụng tiêu đề này nếu bạn sử dụng tính năng nén phản hồi. Người dùng thường yêu cầu tài nguyên có tiêu đề Accept-Encoding: gzip, deflate; nếu máy chủ được định cấu hình để hỗ trợ nén, thì phản hồi có thể đi kèm với các tiêu đề Content-Encoding: gzipVary: Accept-Encoding rồi.

+1

Vâng, Vary tiêu đề phải làm các trick. Cảm ơn. – Peter

+1

Tuyệt vời! Shea plea cho một upvote, sau đó? – yfeldblum

+0

Đây có phải là vấn đề nếu bạn sử dụng HTTPS không? (nên được sử dụng nếu bạn đang sử dụng tiêu đề Xác thực cơ bản hoặc Cấp quyền) – wal

9

Đến HTTP/1.1 RFC phần 14,8 (http://tools.ietf.org/html/rfc2616#section-14.8):

When a shared cache (see section 13.7) receives a request 
    containing an Authorization field, it MUST NOT return the 
    corresponding response as a reply to any other request, unless one 
    of the following specific exceptions holds: 

    1. If the response includes the "s-maxage" cache-control 
    directive, the cache MAY use that response in replying to a 
    subsequent request. But (if the specified maximum age has 
    passed) a proxy cache MUST first revalidate it with the origin 
    server, using the request-headers from the new request to allow 
    the origin server to authenticate the new request. (This is the 
    defined behavior for s-maxage.) If the response includes "s- 
    maxage=0", the proxy MUST always revalidate it before re-using 
    it. 

    2. If the response includes the "must-revalidate" cache-control 
    directive, the cache MAY use that response in replying to a 
    subsequent request. But if the response is stale, all caches 
    MUST first revalidate it with the origin server, using the 
    request-headers from the new request to allow the origin server 
    to authenticate the new request. 

    3. If the response includes the "public" cache-control directive, 
    it MAY be returned in reply to any subsequent request. 
+1

Tôi nghĩ người hỏi sử dụng cờ 'public' trong tiêu đề' cache-control'. Bài đăng của bạn không trả lời câu hỏi, nhưng nó hữu ích. – dizel3d

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