ความแตกต่างระหว่างส่วนหัวหมดอายุและส่วนควบคุมแคชคืออะไร


คำตอบ:


130

Cache-Controlเป็นที่รู้จักใน HTTP / 1.1 Expiresและข้อเสนอทางเลือกมากขึ้นกว่า สามารถใช้เพื่อทำสิ่งเดียวกันให้สำเร็จ แต่ค่าข้อมูลสำหรับExpiresเป็นวันที่ของ HTTP ในขณะที่Cache-Controlmax-age ให้คุณระบุจำนวนเวลาที่สัมพันธ์กันดังนั้นคุณสามารถระบุ "X ชั่วโมงหลังจากที่มีการร้องขอหน้า"

การควบคุมแคช HTMLเป็นคำถามที่คล้ายกันมากและมีลิงก์ที่ดีสำหรับการสอนแคชที่ควรตอบคำถามส่วนใหญ่ของคุณ (เช่นhttp://www.mnot.net/cache_docs/#EXPIRES ) ในการสรุปผลExpiresขอแนะนำให้ใช้กับทรัพยากรคงที่เช่นรูปภาพและCache-Controlเมื่อคุณต้องการควบคุมวิธีการแคชให้สมบูรณ์ยิ่งขึ้น


8
มันคุ้มค่าที่จะแสดงความคิดเห็นว่าการควบคุมแคชเป็นสิ่งที่เบราว์เซอร์ทั้งหมดจะใช้ แต่จะมีประโยชน์ในการระบุส่วนหัวทั้งสองในกรณีที่มีพร็อกซีเก่าในทาง
Nacho Coloma

3
ใช้บริการredbot.org (โดยMark Nottinghamผู้เขียนบทความแคชอ้างอิงในคำตอบข้างต้น) เพื่อตรวจสอบการใช้งานที่ถูกต้องของส่วนหัวการแคช
daxim

35
นอกจากนี้: "เมื่อทั้งการควบคุมแคชและการหมดอายุมีอยู่การควบคุมแคชจะมีความสำคัญกว่า" - mnot.net/cache_docs/
KFunk

35

หากคุณใช้ CDN (Cloud Delivery Network) ฉันแนะนำให้ใช้ Cache-Control ด้วยเวลาสูงสุดในไม่กี่วินาที ตัวอย่างเช่นการควบคุมแคช: max-age = 604800 วิธีนี้จะช่วยป้องกันการร้องขอไปยังเซิร์ฟเวอร์ต้นทางของคุณ: ด้วย "Exp Wed, 30 Oct 20xx 04:37:07 GMT" เบราว์เซอร์ทั้งหมดจะขอให้คุณพร้อมกัน


22
Apache (และอาจเป็นเซิร์ฟเวอร์จำนวนมาก) มักจะกำหนดวันที่หมดอายุโดยใช้เวลาที่ไฟล์ถูกร้องขอ + เวลาที่คุณระบุ cache-controlในฐานะที่เป็นวันนี้ใช้วินาทีสถานการณ์ของคุณมากไม่น่าและพฤติกรรมเป็นเช่นเดียวกับ ดังนั้นฉันจึงไม่เห็นสาเหตุที่จะมีการร้องขอยอดเขาเมื่อใช้Expires:
hilnius

19

อ้างอิงจากบทความ Google Developers, การแคช HTTP :

ส่วนหัวของ Cache-Control ถูกกำหนดเป็นส่วนหนึ่งของข้อมูลจำเพาะ HTTP / 1.1 และแทนที่ส่วนหัวก่อนหน้า (เช่นหมดอายุ) ที่ใช้เพื่อกำหนดนโยบายการตอบสนองการแคช เบราว์เซอร์ที่ทันสมัยทั้งหมดรองรับการควบคุมแคชดังนั้นนั่นคือทั้งหมดที่เราต้องการ


ไม่เพียง แต่เบราว์เซอร์ที่ทันสมัยทุกรุ่นรองรับเท่านั้น แต่ยังควรเป็นเพราะมันอยู่ในข้อมูลจำเพาะ: "ถ้าคำตอบรวมทั้งส่วนหัว Expires และคำสั่งอายุสูงสุดคำสั่งอายุสูงสุดจะแทนที่ส่วนหัว Expires แม้ว่า Expires ส่วนหัวมีข้อ จำกัด มากขึ้น "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk

8

Cache-Control ถูกกำหนดใน HTTP / 1.1 จะบอกกลไกการแคชทั้งหมดจากเซิร์ฟเวอร์ไปยังไคลเอนต์ว่าพวกเขาอาจแคชวัตถุนี้ Cache-Control: max-age=3600มีหน่วยวัดเป็นวินาที

Expiresข้อมูลส่วนหัวให้วันที่ / เวลาหลังจากที่การตอบสนองถือว่าเก่า หมดค่าเป็น HTTP Expires: Tue, 18 Jul 2017 16:07:23 GMTประทับเวลาวันที่:

หากคำตอบรวมถึงCache-Controlเขตข้อมูลที่มีmax-ageคำสั่งผู้รับจะต้องละเว้นExpiresเขตข้อมูลนั้น


4

Heroku devcenter มีบทความที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้

อ้างจากมัน

ในขณะที่ส่วนหัว Cache-Control เปิดการแคชฝั่งไคลเอ็นต์และตั้งค่าอายุสูงสุดของทรัพยากรส่วนหัว Expires จะถูกใช้เพื่อระบุจุดเฉพาะในเวลาที่ทรัพยากรไม่ถูกต้องอีกต่อไป


0

ยกเว้นตัวเลือกส่วนตัว / สาธารณะของ CC ฉันไม่เห็นความแตกต่างเลย เมื่อใช้ Expires เช่น "access plus 1 ปี / เดือน / สัปดาห์ / วัน" จะทำงานในลักษณะเดียวกับที่ CC ทำ


คุณสนใจอธิบายการลงคะแนนเสียงหรือไม่? ฉันทำการทดสอบอย่างกว้างขวางใน Chrome, Safari และ Firefox การควบคุมแคชมีตัวเลือกบางอย่างที่ไม่สามารถใช้ได้เมื่อใช้หมดอายุ แต่เพื่อวัตถุประสงค์ในทางปฏิบัติทั้งหมดทั้งสองทำงานในลักษณะเดียวกัน
Rob

-1

หากคุณยังสนใจฉันปล่อยให้คำแนะนำนี้โดยตรงจากเด็ก ๆ ของ google https://developers.google.com/speed/docs/insights/LeverageBrowserCaching พวกเขาต้องการการหมดอายุก่อนการควบคุมแคช


คุณแน่ใจหรือว่าพวกเขาชอบหมดอายุการควบคุมแคช? ฉันอ่านการแทนที่เป็นวิธีอื่น ๆ อย่างน้อยสำหรับ Firefox developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00

ขณะนี้หน้าดังกล่าวระบุว่า "ไม่รองรับหน้านี้เขียนขึ้นสำหรับรุ่นที่ 4 ของ PageSpeed ​​Insights API ซึ่งเลิกใช้แล้วและจะปิดตัวลงในเดือนพฤษภาคม 2562 รุ่นที่ 5 เป็นรุ่นล่าสุดและให้ข้อมูลจริงจากประสบการณ์ผู้ใช้ Chrome รายงานและข้อมูลห้องทดลองจาก Lighthouse "
Jochem Schulenklopper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.