Làm cách nào để ngăn Firefox và Safari lưu vào bộ nhớ đệm nội dung iframe?
Tôi có một trang web đơn giản với iframe đến một trang trên một trang khác. Cả trang bên ngoài và trang bên trong đều có tiêu đề phản hồi HTTP để ngăn chặn bộ nhớ đệm. Khi tôi nhấp vào nút "quay lại" trong trình duyệt, trang bên ngoài hoạt động bình thường, nhưng không có vấn đề gì, trình duyệt luôn truy xuất bộ nhớ cache của trang iframed. IE hoạt động tốt, nhưng Firefox và Safari đang khiến tôi gặp rắc rối.
Trang web của tôi trông giống như sau:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
Các var
biến luôn thay đổi. Mặc dù thực tế là URL của iframe đã thay đổi (và do đó, trình duyệt sẽ thực hiện một yêu cầu mới đối với trang đó), trình duyệt chỉ tìm nạp nội dung được lưu trong bộ nhớ cache.
Tôi đã kiểm tra các yêu cầu và phản hồi HTTP qua lại và tôi nhận thấy rằng ngay cả khi trang bên ngoài có chứa <iframe src="webpage2.html?var=222" />
, trình duyệt vẫn sẽ tìm nạp webpage2.html?var=111
.
Đây là những gì tôi đã thử cho đến nay:
- Thay đổi URL iframe bằng giá trị var ngẫu nhiên
- Thêm tiêu đề Expires, Cache-Control và Pragma vào trang web bên ngoài
- Thêm tiêu đề Expires, Cache-Control và Pragma vào trang web bên trong
Tôi không thể thực hiện bất kỳ thủ thuật JavaScript nào vì tôi bị chính sách nguồn gốc chặn.
Tôi đang cạn kiệt ý tưởng. Có ai biết cách ngăn trình duyệt lưu vào bộ nhớ đệm nội dung iframed không?
Cập nhật
Tôi đã cài đặt Fiddler2 như Daniel đề xuất để thực hiện một thử nghiệm khác và thật không may, tôi vẫn nhận được kết quả tương tự.
Đây là bài kiểm tra tôi đã thực hiện:
- Trang bên ngoài tạo số ngẫu nhiên bằng cách sử dụng
Math.random()
trong JSP. - Trang bên ngoài hiển thị số ngẫu nhiên trên trang web.
- Trang bên ngoài gọi iframe, chuyển số ngẫu nhiên.
- Trang bên trong hiển thị số ngẫu nhiên.
Với bài kiểm tra này, tôi có thể biết chính xác trang nào đang cập nhật và trang nào được lưu vào bộ nhớ đệm.
Kiểm tra thị giác
Để kiểm tra nhanh, tôi tải trang, điều hướng đến một trang khác, rồi nhấn "quay lại". Đây là kết quả:
Trang gốc:
- Trang ngoài: 0,21300034290246206
- Trang bên trong: 0,21300034290246206
Rời khỏi trang, sau đó nhấn lại:
- Trang ngoài: 0.4470929019483644
- Trang bên trong: 0,21300034290246206
Điều này cho thấy rằng trang bên trong đang được lưu vào bộ nhớ đệm, mặc dù trang bên ngoài đang gọi nó bằng một tham số GET khác trong URL. Vì một số lý do, trình duyệt đang bỏ qua thực tế rằng iframe đang yêu cầu một URL mới; nó chỉ cần tải cái cũ.
Kiểm tra Fiddler
Chắc chắn, Fiddler xác nhận điều tương tự.
(Tôi tải trang.)
Trang bên ngoài được gọi. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 được gọi.
(Tôi điều hướng khỏi trang và sau đó quay lại.)
Trang bên ngoài được gọi. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 được gọi.
Chà, từ thử nghiệm này, có vẻ như trình duyệt web không lưu vào bộ nhớ cache của trang, nhưng nó đang lưu vào bộ nhớ đệm URL của iframe và sau đó đưa ra yêu cầu mới trên URL được lưu trong bộ nhớ cache đó. Tuy nhiên, tôi vẫn lúng túng không biết làm thế nào để giải quyết vấn đề này.
Có ai có bất kỳ ý tưởng nào về cách ngăn trình duyệt web lưu vào bộ nhớ đệm các URL iframe không?