tôi thực hiện một yêu cầu Ajax trong đó tôi thiết lập năng bộ nhớ cache phản ứng và tiêu đề được sửa đổi lần cuối:refresh cứng và bộ nhớ đệm XMLHttpRequest trong Internet Explorer/Firefox
if (!String.IsNullOrEmpty(HttpContext.Current.Request.Headers["If-Modified-Since"]))
{
HttpContext.Current.Response.StatusCode = 304;
HttpContext.Current.Response.StatusDescription = "Not Modified";
return null;
}
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
HttpContext.Current.Response.Cache.SetLastModified(DateTime.UtcNow);
này hoạt động như mong đợi. Lần đầu tiên tôi thực hiện yêu cầu Ajax, tôi nhận được 200 OK
. Lần thứ hai tôi nhận được 304 Not Modified
.
Khi tôi làm mới cứng trong Chrome (Ctrl + F5), tôi nhận được 200 OK
- tuyệt vời!
Khi tôi làm mới khó khăn trong Internet Explorer/Firefox, tôi nhận được 304 Not Modified
. Tuy nhiên, mọi tài nguyên khác (JS/CSS/HTML/PNG) trả về 200 OK
.
Lý do là vì tiêu đề "Nếu không được sửa đổi" được gửi cho XMLHttpRequest bất kể làm mới cứng trong các trình duyệt đó. Tôi tin rằng Steve Souders ghi lại nó here.
Tôi đã thử đặt ETag và điều chỉnh trên "If-None-Match" thành không có sẵn (được đề cập trong các nhận xét trên trang Steve Souders).
Có ai có bất kỳ đá quý trí tuệ nào ở đây không?
Cảm ơn, Bến
Cập nhật
tôi có thể kiểm tra "If-Modified-Since" chống lại một ngày sửa đổi cuối cùng được lưu trữ. Tuy nhiên, hy vọng câu hỏi này sẽ giúp những người dùng SO khác tìm thấy tiêu đề được đặt không chính xác.
Cập nhật 2
Trong khi yêu cầu được gửi với "If-Modified-Since" tiêu đề mỗi lần. Internet Explorer thậm chí sẽ không thực hiện yêu cầu nếu hết hạn không được đặt hoặc được đặt thành ngày trong tương lai. Vô ích!
Cập nhật 3
này cũng có thể là một blog sống bây giờ. Internet Explorer không làm phiền yêu cầu thứ hai khi localhost. Sử dụng IP thực hoặc loopback sẽ hoạt động.
Bạn đã cố gắng ngăn chặn bộ nhớ đệm bằng cách thay đổi tên tệp ở mỗi yêu cầu bằng cách sử dụng số ngẫu nhiên hoặc giá trị ngày giờ trong đường dẫn src script của bạn (như src = 'myscript.js? Q = 45920')? –
Tôi muốn nó được lưu trữ trừ khi nó đến từ một làm mới khó. Do đó, việc đặt tham số chuỗi truy vấn ngẫu nhiên không giúp ích gì. Nhờ đề nghị mặc dù! –