จาก RFC 2616
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
ไม่มีแคช
หากคำสั่ง no-cache ไม่ได้ระบุชื่อฟิลด์ดังนั้นแคชจะต้องไม่ใช้การตอบสนองเพื่อตอบสนองต่อการร้องขอในภายหลังโดยไม่ทำการตรวจสอบซ้ำกับเซิร์ฟเวอร์ต้นทาง สิ่งนี้ทำให้เซิร์ฟเวอร์ต้นทางสามารถป้องกันการแคชได้แม้กระทั่งแคชที่ได้รับการกำหนดค่าให้ส่งคืนการตอบสนองเก่าต่อคำขอของไคลเอ็นต์
ดังนั้นจึงแนะนำให้ตัวแทนตรวจสอบการตอบกลับทั้งหมดอีกครั้ง
เปรียบเทียบสิ่งนี้กับ
ต้องตรวจสอบใหม่
เมื่อคำสั่งต้องตรวจสอบความถูกต้องอยู่ในการตอบกลับที่ได้รับจากแคชแคชนั้นจะต้องไม่ใช้รายการหลังจากที่กลายเป็นเก่าเพื่อตอบสนองต่อการร้องขอต่อมาโดยไม่ต้องตรวจสอบซ้ำกับเซิร์ฟเวอร์ต้นทางครั้งแรก
ดังนั้นจึงแนะนำให้ตัวแทนตรวจสอบการตอบสนองเก่าอีกครั้ง
โดยเฉพาะอย่างยิ่งในเรื่องที่no-cache
ว่าตัวแทนผู้ใช้นี้ปฏิบัติต่อคำสั่งนี้อย่างชัดเจนหรือไม่?
อะไรคือสิ่งที่no-cache
ถ้ามีmust-revalidate
และmax-age
?
ดูความคิดเห็นนี้:
http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/
ไม่มีแคช
แม้ว่าคำสั่งนี้ฟังดูเหมือนเป็นการสั่งให้เบราว์เซอร์ไม่แคชหน้าเว็บ แต่ก็มีความแตกต่างเล็กน้อย คำสั่ง“ no-cache” ตาม RFC บอกเบราว์เซอร์ว่าควรตรวจสอบความถูกต้องอีกครั้งกับเซิร์ฟเวอร์ก่อนที่จะแสดงหน้าเว็บจากแคช การตรวจสอบความถูกต้องเป็นเทคนิคที่เรียบร้อยซึ่งช่วยให้แอปพลิเคชันประหยัดแบนด์วิดท์ หากหน้าเว็บที่เบราว์เซอร์ไม่ได้เปลี่ยนเซิร์ฟเวอร์เพียงแค่ส่งสัญญาณไปยังเบราว์เซอร์และหน้าจะแสดงจากแคช ดังนั้นเบราว์เซอร์ (อย่างน้อยก็ในทางทฤษฎี) จะเก็บหน้าเว็บไว้ในแคช แต่จะแสดงเฉพาะเมื่อทำการตรวจสอบความถูกต้องใหม่กับเซิร์ฟเวอร์ ในทางปฏิบัติ IE และ Firefox ได้เริ่มรักษาคำสั่ง no-cache ราวกับว่ามันสั่งให้เบราว์เซอร์ที่จะไม่แคชแม้แต่หน้า เราเริ่มสังเกตพฤติกรรมนี้เมื่อประมาณหนึ่งปีที่แล้ว
มีใครมีอะไรเป็นทางการมากขึ้นในเรื่องนี้?
ปรับปรุง
คำสั่งต้องตรวจสอบความถูกต้องควรจะใช้โดยเซิร์ฟเวอร์หากและหากล้มเหลวในการตรวจสอบคำขอในการเป็นตัวแทนอาจส่งผลให้การดำเนินงานที่ไม่ถูกต้องเช่นธุรกรรมทางการเงินที่ไม่ได้ดำเนินการอย่างเงียบ ๆ
นั่นคือสิ่งที่ฉันไม่เคยใส่ใจจนถึงตอนนี้ RFC กำลังบอกว่าจะไม่ใช้งานต้องทำการตรวจสอบซ้ำอีกครั้ง สิ่งนี้คือด้วยบริการบนเว็บคุณจะต้องมองในแง่ลบและถือว่าเลวร้ายที่สุดสำหรับแอพไคลเอ็นต์ที่คุณไม่รู้จัก ทรัพยากรเก่าใด ๆ ที่มีศักยภาพที่จะทำให้เกิดปัญหา
และอย่างอื่นที่ฉันเพิ่งพิจารณาโดยไม่ต้องแก้ไขครั้งสุดท้ายหรือ ETags เบราว์เซอร์สามารถดึงทรัพยากรทั้งหมดอีกครั้ง อย่างไรก็ตามด้วย ETags ฉันสังเกตว่า Chrome อย่างน้อยดูเหมือนว่าจะตรวจสอบความถูกต้องในทุกคำขอ ซึ่งทำให้ทั้งสองคำสั่ง moot หรืออย่างน้อยมีชื่อไม่ดีเนื่องจากพวกเขาไม่สามารถตรวจสอบได้อย่างถูกต้องเว้นแต่คำขอจะมีส่วนหัวอื่น ๆ ที่ทำให้ "ตรวจสอบอีกครั้ง" เสมอ
ฉันแค่ต้องการทำให้จุดสุดท้ายชัดเจนขึ้น เพียงแค่ตั้งค่าmust-revalidate
แต่ไม่รวม ETag หรือ Last-Modified เอเจนต์สามารถรับเนื้อหาได้อีกครั้งเนื่องจากไม่มีสิ่งใดที่จะส่งไปยังเซิร์ฟเวอร์เพื่อเปรียบเทียบ
อย่างไรก็ตามการทดสอบเชิงประจักษ์ของฉันแสดงให้เห็นว่าเมื่อ ETag หรือข้อมูลส่วนหัวที่ถูกแก้ไขรวมอยู่ในการตอบสนองตัวแทนจะทำการตรวจสอบความถูกต้องอยู่เสมอโดยไม่คำนึงถึงการมีอยู่ของmust-revalidate
ส่วนหัว
ดังนั้นจุดประสงค์must-revalidate
คือการบังคับให้ 'บายพาสแคช' เมื่อมันค้างซึ่งจะเกิดขึ้นเมื่อคุณตั้งค่าอายุการใช้งาน / อายุเท่านั้นดังนั้นหากmust-revalidate
ตั้งค่าการตอบสนองที่ไม่มีอายุหรือส่วนหัวอื่น ๆ มันจะมีประสิทธิภาพเทียบเท่ากับno-cache
ตั้งแต่ การตอบสนองจะได้รับการพิจารณาค้างทันที
- ดังนั้นฉันจะทำเครื่องหมายคำตอบของ Gili ในที่สุด!