คุณจะป้องกันไม่ให้ Firefox และ Safari แคชเนื้อหา iframe ได้อย่างไร
ฉันมีหน้าเว็บธรรมดาที่มี iframe ไปยังหน้าในไซต์อื่น ทั้งเพจด้านนอกและเพจด้านในมีส่วนหัวการตอบสนอง HTTP เพื่อป้องกันการแคช เมื่อฉันคลิกปุ่ม "ย้อนกลับ" ในเบราว์เซอร์หน้าภายนอกจะทำงานได้อย่างถูกต้อง แต่ไม่ว่าจะเป็นอย่างไรเบราว์เซอร์จะดึงแคชของหน้า iframed เสมอ IE ทำงานได้ดี แต่ Firefox และ Safari ทำให้ฉันมีปัญหา
หน้าเว็บของฉันมีลักษณะดังนี้:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
var
ตัวแปรเสมอเปลี่ยนแปลง แม้ว่า URL ของ iframe จะมีการเปลี่ยนแปลง (ดังนั้นเบราว์เซอร์ควรส่งคำขอใหม่ไปยังหน้านั้น) แต่เบราว์เซอร์จะดึงเนื้อหาที่แคชไว้
ผมได้ตรวจสอบการร้องขอ HTTP และการตอบสนองจะกลับมาและผมสังเกตเห็นว่าแม้ว่าหน้าด้านนอกมีเบราว์เซอร์จะยังคงสามารถดึงข้อมูล<iframe src="webpage2.html?var=222" />
webpage2.html?var=111
นี่คือสิ่งที่ฉันได้ลองทำแล้ว:
- การเปลี่ยน URL iframe ด้วยค่า var แบบสุ่ม
- การเพิ่มส่วนหัว Expires, Cache-Control และ Pragma ในหน้าเว็บภายนอก
- การเพิ่มส่วนหัว Expires, Cache-Control และ Pragma ในหน้าเว็บด้านใน
ฉันไม่สามารถใช้เทคนิค JavaScript ใด ๆ ได้เนื่องจากฉันถูกบล็อกโดยนโยบายที่มาเดียวกัน
ฉันหมดความคิด ไม่มีใครรู้วิธีหยุดเบราว์เซอร์จากการแคชเนื้อหา iframed?
อัปเดต
ฉันติดตั้ง Fiddler2 ตามที่ Daniel แนะนำให้ทำการทดสอบอีกครั้งและน่าเสียดายที่ฉันยังคงได้ผลลัพธ์เหมือนเดิม
นี่คือการทดสอบที่ฉันทำ:
- หน้านอกสร้างหมายเลขสุ่มโดยใช้
Math.random()
ใน JSP - หน้านอกจะแสดงหมายเลขสุ่มบนหน้าเว็บ
- หน้าเว็บภายนอกเรียก iframe โดยส่งผ่านหมายเลขสุ่ม
- หน้าด้านในจะแสดงหมายเลขสุ่ม
ด้วยการทดสอบนี้ฉันสามารถดูได้อย่างชัดเจนว่าหน้าใดกำลังอัปเดตและหน้าใดถูกแคช
ทดสอบภาพ
สำหรับการทดสอบอย่างรวดเร็วฉันโหลดหน้านี้ไปที่หน้าอื่นแล้วกด "ย้อนกลับ" นี่คือผลลัพธ์:
หน้าเดิม:
- หน้านอก: 0.21300034290246206
- หน้าภายใน: 0.21300034290246206
ออกจากหน้าแล้วกดย้อนกลับ:
- หน้านอก: 0.4470929019483644
- หน้าภายใน: 0.21300034290246206
นี่แสดงว่าเพจด้านในกำลังถูกแคชแม้ว่าเพจด้านนอกจะเรียกเพจด้วยพารามิเตอร์ GET ที่แตกต่างกันใน URL ด้วยเหตุผลบางประการเบราว์เซอร์จึงเพิกเฉยต่อข้อเท็จจริงที่ว่า iframe กำลังขอ URL ใหม่ มันก็โหลดอันเก่า
การทดสอบ Fiddler
แน่นอนว่า Fiddler ยืนยันในสิ่งเดียวกัน
(ฉันโหลดหน้านี้)
เรียกว่าเพจด้านนอก HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206เรียกว่า
(ฉันออกจากหน้าแล้วกดย้อนกลับ)
เรียกว่าเพจด้านนอก HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206เรียกว่า
จากการทดสอบนี้ดูเหมือนว่าเว็บเบราว์เซอร์จะไม่ได้แคชหน้าเว็บ แต่เป็นการแคช URL ของ iframe จากนั้นทำการร้องขอใหม่ใน URL ที่แคชนั้น อย่างไรก็ตามฉันยังคงนิ่งงันเกี่ยวกับวิธีแก้ปัญหานี้
ใครมีความคิดเกี่ยวกับวิธีหยุดเว็บเบราว์เซอร์จากการแคช URL ของ iframe บ้าง?