2012-07-03 24 views
7

Tôi đã viết một dịch vụ web RESTful chỉ được các thiết bị tiêu thụ, không bao giờ là trình duyệt. Các thiết bị truy cập internet thông qua bộ định tuyến gia dụng hiện có của chủ sở hữu và liên lạc với dịch vụ web bằng cách gửi yêu cầu HTTP thông qua bộ định tuyến thường xuyên sau mỗi 30 giây. Những yêu cầu này chủ yếu là yêu cầu "bỏ phiếu" để xem liệu dịch vụ web có bất kỳ thông tin mới nào cho thiết bị hay không.Làm cách nào khách hàng có thể sử dụng dịch vụ web của tôi bỏ qua bộ nhớ cache proxy trong suốt của ISP để đảm bảo yêu cầu của họ đến máy chủ của tôi?

Tôi muốn ngăn chặn bất kỳ proxy proxy nào trong suốt từ việc chặn yêu cầu và trả về phản hồi được lưu trong bộ nhớ cache. Tôi đã đọc rằng một cách để làm điều này là để thêm một chuỗi truy vấn ngẫu nhiên vào cuối URL của yêu cầu để đánh lừa proxy để nghĩ rằng đó là một yêu cầu duy nhất. Ví dụ:

http://webservicedomain.com/poll/?randomNumber=384389 

Tôi có khả năng thực hiện việc này, nhưng đây có phải là cách tốt nhất không? Kinda có vẻ như một hack.

Trả lời

14

Bạn nên sử dụng HTTP's Cache-Control header để đạt được điều này.

Trong lời, bạn cần gửi:

Cache-Control: private, must-revalidate, max-age=0 
  • tin - Chỉ ra rằng toàn bộ hoặc một phần của thông điệp trả lời là để dành cho một người dùng duy nhất và không được lưu trữ bởi một bộ nhớ cache chia sẻ.
  • độ tuổi tối đa = 0 - Cho biết rằng khách hàng sẵn sàng chấp nhận phản hồi có độ tuổi không lớn hơn 0 giây. I E. phản ứng ngay lập tức cũ.
  • phải xác nhận lại - Khi có phản hồi nhận được bởi bộ nhớ cache, bộ nhớ cache KHÔNG PHẢI sử dụng mục nhập sau khi nó trở nên cũ để đáp ứng yêu cầu tiếp theo mà không cần xác nhận lại nó với máy chủ gốc.

Bạn cũng shoud gửi một Pragma header cho di sản HTTP/1.0 máy chủ trung gian:

Pragma: no-cache 

đọc liên quan:

+0

Vì vậy, bạn không nghĩ rằng tôi cần phải bao gồm 'no-cache' và' no-store' trong giá trị cho tiêu đề 'Cache-Control'? –

1

Bạn có thể thử sử dụng kết nối được mã hóa. Tôi nghĩ proxy proxy không được phép lưu trữ phản hồi từ giao tiếp được mã hóa.

Một giải pháp có thể là định cấu hình HTTPS trên máy chủ của bạn, một giải pháp khác có thể là định cấu hình ứng dụng khách để sử dụng one of SSL proxies để gửi yêu cầu đến máy chủ HTTP của bạn.

+0

HTTPS không phải là tùy chọn cho kịch bản của tôi.Nó phải là HTTP đơn giản để cho phép hàng nghìn yêu cầu mỗi phút. Quá trình bắt tay cần thiết cho HTTPS sẽ tạo ra quá nhiều chi phí mà tôi nghĩ. –

1

Với bộ điều khiển Cache thích hợp và các tiêu đề khác, hãy sử dụng POST và thì đấy! Điều đó có thể giải quyết được vấn đề bạn đã nêu.

Bạn có thể muốn thấy điều này - discussion on caching

Sau đó các tham số phụ vượt qua cũng có thể tránh được.

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