Các câu trả lời vào bộ nhớ đệm dựa trên tiêu đề ngày và tuổi
Chúng tôi đang thấy một số hành vi trong đó chúng tôi không lưu các phản hồi vào bộ nhớ đệm trong OkHttp và kết thúc lần nào cũng gặp phải máy chủ. Tuy nhiên, phản hồi có thời gian Hết hạn trong tương lai, vì vậy lý tưởng là nó sẽ được lưu vào bộ nhớ đệm.
Dưới đây là một ví dụ đơn giản về tiêu đề mà chúng tôi thấy trong phản hồi (yêu cầu đã được gửi và phản hồi đã được nhận tại Sat, 16 Jan 2021 00:40:36 GMT
):
date: Sat, 16 Jan 2021 00:40:36 GMT
age: 6
expires: Sat, 16 Jan 2021 00:40:40 GMT
last-modified: Sat, 16 Jan 2021 00:40:30 GMT
Từ những gì tôi đã thấy khi xem CacheStrategy, vấn đề là nó cộng ngày + tuổi với nhau để xem liệu đã quá thời hạn sử dụng hay chưa. Trong trường hợp này 00:40:36 + 6 = 00:40:42 > 00:40:40
, vì vậy nó sẽ không được thêm vào bộ nhớ cache.
Vì vậy, tôi nghĩ lý tưởng nhất là ngày phản hồi sẽ bằng với ngày sửa đổi lần cuối (trong trường hợp này là Thứ Bảy, ngày 16 tháng 1 năm 2021 00:40:30 GMT) hoặc chúng tôi cần phải có CacheStrategy tùy chỉnh để sử dụng lần sửa đổi cuối cùng thay vì ngày cho những tính toán này.
Nếu ai đó có bất kỳ thông tin chi tiết nào về việc liệu tôi có đang đưa ra bất kỳ giả định xấu nào hay nếu một trong các tùy chọn trên phù hợp hơn, vui lòng cho tôi biết. Tôi đã xem xét một số thông số kỹ thuật cho tiêu đề ngày / tuổi và tôi hơi không rõ chúng nên như thế nào trong trường hợp này.
Tôi cũng cảm thấy hơi khó khăn khi gỡ lỗi hành vi lưu vào bộ nhớ đệm trong OkHttp, hiện tại tôi đang sử dụng các điểm ngắt có điều kiện để cố gắng theo dõi nó, nhưng nếu ai có ý kiến hay hơn, tôi cũng đánh giá cao điều đó.
Trả lời
Thay thế expires
tiêu đề này bằng tiêu đề Cache-Control đặt chỉ thị max-age:
Cache-Control: max-age=86400
Điều này sẽ khiến OkHttp lưu phản hồi vào bộ nhớ cache trong 24 giờ bất kể khi nào nó được phân phát. Tiêu đề hết hạn có vấn đề vì CloudFlare coi đó là thời gian hết hạn cụ thể chứ không phải thời hạn.
Tôi khuyên bạn nên thử sử dụng tiêu đề "Kiểm soát bộ nhớ cache" với max-age
lựa chọn của bạn.
Lý do chính tôi làm điều này là vì điều này cũng được hiển thị trong một ví dụ từ tài liệu chính thức, hãy xem: https://square.github.io/okhttp/interceptors/#rewriting-responses
.header("Cache-Control", "max-age=60")
Cách ưa thích để làm điều này rõ ràng là ở back-end. Nếu bạn không thể sửa đổi back-end, thì tôi đoán một thiết bị đánh chặn sẽ là lựa chọn thứ hai. Xin lưu ý rằng đó là lựa chọn cuối cùng không được khuyến khích.
Ngoài phần phụ trợ của bạn, tôi cũng sẽ xem xét các tùy chọn mà chính cloudflare cung cấp: https://support.cloudflare.com/hc/en-us/articles/360021806811-Getting-Started-with-Cloudflare-Caching