Tôi có trang web triển khai mẫu đăng/chuyển hướng/nhận để tránh các bài đăng kép trong một ứng dụng CRUD đơn giản.Đăng-Chuyển hướng-Nhận với Internet Explorer
Yêu cầu/chuỗi phản ứng dự định ở đây là:
- duyệt sẽ gửi dữ liệu thông qua
POST
- máy chủ sẽ thay đổi DB, đáp ứng với tình trạng
302 Moved Temporarily
và một tiêu đềLocation
- trình duyệt sau chuyển hướng qua
GET
Máy chủ
- phản hồi với trang được cập nhật
Đây là cách nó được cho là hoạt động - và trong Chrome chẳng hạn. Tuy nhiên,
Internet Explorer 9, cũng gửi bước 3 dưới dạng POST
(bao gồm cả bộ dữ liệu biểu mẫu hoàn chỉnh!). Tại sao? Tôi nên làm gì để sử dụng nó GET
?
Tôi nên thêm điều đó ngoài chuỗi truy vấn chuyển hướng đi đến cùng một vị trí với mục tiêu biểu mẫu.
Tôi đã thử:
- tất cả có sẵn các chế độ render (IE7, IE8, IE9, Quirks, tiêu chuẩn, compat)
- một DOCTYPE đầy đủ
- một URL có liên quan hoặc là một tuyệt đối trong các
Location
tiêu đề - HTTP Status 303 (chỉ để xem nếu mà làm cho bất kỳ sự khác biệt)
Làm việc cho tôi với ví dụ đơn giản nhất có thể, không có DOCTYPE nào cả, v.v. Bạn có chắc chắn rằng IE9 thực sự gửi yêu cầu POST giống hệt thứ hai không? Không có proxy hay bất cứ thứ gì khác ở giữa? – Jon
Vâng, nhìn vào tab mạng trong trình gỡ lỗi cho tôi biết điều này. Máy chủ cũng nhận được POST. – Tomalak
RFC 2616 cho trạng thái HTTP/1.1, trong phần 10.3.3 cho [định nghĩa mã trạng thái] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) mà trình duyệt phản ứng với '302' phản hồi nên * không * thay đổi phương thức đang được sử dụng - vì vậy, POST phải ở trạng thái POST. IE thực sự làm đúng. Nhưng một '303' * nên * trở thành một GET, vì vậy IE đang làm * rằng * sai, theo điểm bullet cuối cùng của bạn. –