การแคชการตอบกลับตามส่วนหัววันที่และอายุ
เรากำลังเห็นพฤติกรรมบางอย่างที่เราไม่ได้แคชการตอบกลับใน OkHttp และท้ายที่สุดก็โดนเซิร์ฟเวอร์ทุกครั้ง อย่างไรก็ตามการตอบกลับมีเวลาหมดอายุในอนาคตดังนั้นจึงควรแคชไว้
นี่คือตัวอย่างง่ายๆของส่วนหัวที่เราเห็นในการตอบกลับ (ส่งคำขอและได้รับการตอบกลับที่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
จากสิ่งที่ฉันเห็นจากการดู CacheStrategy ปัญหาคือมันรวมวันที่ + อายุเข้าด้วยกันเพื่อดูว่าเลยเวลาหมดอายุหรือไม่ ในกรณีนี้00:40:36 + 6 = 00:40:42 > 00:40:40
จึงไม่มีการเพิ่มแคช
ดังนั้นฉันคิดว่าวันที่ตอบกลับจะเท่ากับแก้ไขล่าสุด (ในกรณีนี้คือวันเสาร์ที่ 16 มกราคม 2021 00:40:30 น. GMT) หรือเราจำเป็นต้องมี CacheStrategy ที่กำหนดเองเพื่อใช้ last-modified แทน วันที่สำหรับการคำนวณเหล่านี้
หากใครมีข้อมูลเชิงลึกว่าฉันตั้งสมมติฐานที่ไม่ดีหรือไม่หรือตัวเลือกใดตัวเลือกหนึ่งข้างต้นดีกว่าโปรดแจ้งให้เราทราบ ฉันได้ดูรายละเอียดบางอย่างสำหรับส่วนหัววันที่ / อายุแล้วและฉันก็ค่อนข้างไม่ชัดเจนว่าควรจะเป็นอย่างไรในสถานการณ์นี้
ฉันยังพบว่ามันยากที่จะดีบักพฤติกรรมการแคชใน OkHttp ตอนนี้ฉันเพิ่งใช้เบรกพอยต์แบบมีเงื่อนไขเพื่อพยายามติดตาม แต่ถ้าใครมีความคิดที่ดีกว่าฉันก็ยินดีด้วยเช่นกัน
คำตอบ
แทนที่expires
ส่วนหัวด้วยส่วนหัว Cache-Control ที่กำหนดคำสั่งอายุสูงสุด:
Cache-Control: max-age=86400
สิ่งนี้จะทำให้ OkHttp แคชการตอบกลับเป็นเวลา 24 ชั่วโมงโดยไม่คำนึงถึงเวลาที่ให้บริการ ส่วนหัวการหมดอายุมีปัญหาเนื่องจาก CloudFlare ถือว่าเป็นเวลาหมดอายุที่เฉพาะเจาะจงไม่ใช่ระยะเวลา
ฉันอยากจะแนะนำให้ลองใช้ส่วนหัว "Cache-Control" กับส่วนที่max-age
คุณเลือก
เหตุผลหลักที่ฉันทำเช่นนี้เพราะสิ่งนี้แสดงไว้ในตัวอย่างจากเอกสารอย่างเป็นทางการโปรดดู: https://square.github.io/okhttp/interceptors/#rewriting-responses
.header("Cache-Control", "max-age=60")
วิธีที่ดีที่สุดในการทำเช่นนี้เห็นได้ชัดว่าอยู่ด้านหลัง หากคุณไม่สามารถแก้ไขส่วนหลังได้ฉันเดาว่าผู้สกัดกั้นจะเป็นตัวเลือกที่สอง โปรดทราบว่าเป็นทางเลือกสุดท้ายที่ท้อแท้
นอกจากแบ็กเอนด์ของคุณแล้วฉันจะดูตัวเลือกที่ cloudflare มีให้ด้วย: https://support.cloudflare.com/hc/en-us/articles/360021806811-Getting-Started-with-Cloudflare-Caching