2012-08-30 22 views
10

Tôi đang gặp phải một số hành vi kỳ lạ của ExpressJS. Trong yêu cầu thứ hai đối với URL API node.js/express của tôi, nó luôn trả về mã phản hồi không được sửa đổi 304 cho IE. Các trình duyệt khác nhận được 200 (Chrome/FF). Vấn đề là, nó trả về 304 ngay cả khi nội dung thực sự đã bị thay đổi. Tôi đã cố gắng tìm kiếm, và không thể tìm thấy bất cứ điều gì về chủ đề này. Ngoài ra, tôi đã cố gắng tìm sự khác biệt trong các tiêu đề yêu cầu của IE và Chrome và có thể thấy bất kỳ tiêu đề nào có thể gây ra điều đó. Bất kỳ trợ giúp sẽ được đánh giá cao.trả về nhanh 304 cho các yêu cầu lặp lại của IE

tôi có thêm kết nối đi qua SSL, trong trường hợp nó quan trọng

+0

Làm cách nào để xác định mã phản hồi mà IE nhận được? – josh3736

+0

+1 Tôi có cùng một vấn đề! – Erik

+0

josh3736, tôi đang kiểm tra nhật ký mạng trong Công cụ dành cho nhà phát triển IE – bbbonthemoon

Trả lời

2

Vâng, tôi cố gắng sửa chữa nó bằng cách thêm Cache-Control tiêu đề

+0

Đó là giải pháp khác. Hy vọng rằng ai đó có thể đăng một giải pháp. – Brad

3

Các Cache-Control tiêu đề một workaround. Lỗi này nằm trong cách giải thích của HTTP explorer về thông số HTTP 1.1 cho tiêu đề.

Tôi đã thêm phần này vào trình xử lý tuyến đường của mình, giải quyết được sự cố. Bạn cũng cần tiêu đề Last-Modified hoặc ETag, nhưng thể hiện đã gửi cho tôi.

res.setHeader("Expires", "-1"); 
res.setHeader("Cache-Control", "must-revalidate, private"); 

Xem: Make IE to cache resources but always revalidate

4

Có cùng một vấn đề tôi nhìn rất nhiều xung quanh và nó quay mà trên thực tế vấn đề xuất phát từ một bộ nhớ đệm tích cực ngu ngốc của ajax nhận được yêu cầu bằng IE. Trong thực tế khi bạn nhìn thấy điều này 304, yêu cầu thực tế không bao giờ chạm vào máy chủ nhưng IE đáp ứng với các dữ liệu mới nhất từ ​​bộ nhớ cache của mình. Đây là hành vi dự định của MS, và do đó chỉ có cách giải quyết.

Ưu tiên của tôi là đính kèm vào mỗi ajax nhận yêu cầu tham số truy vấn vô dụng có chứa thời gian hiện tại. Nó sẽ buộc IE luôn truy xuất từ ​​máy chủ. Phần tốt đẹp là nếu bạn sử dụng jQuery, bạn có thể cấu hình nó để tự động này với

$.ajaxSetup({cache:false}) 

Một tác phẩm khác xung quanh là sử dụng các yêu cầu POST thay vì GET, nhưng điều này không phải lúc nào cũng là một lựa chọn.

Các vấn đề liên quan