2012-03-28 46 views
10

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à:

  1. duyệt sẽ gửi dữ liệu thông qua POST
  2. máy chủ sẽ thay đổi DB, đáp ứng với tình trạng 302 Moved Temporarily và một tiêu đề Location
  3. trình duyệt sau chuyển hướng qua GET
  4. Máy chủ
  5. 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)
+0

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

+0

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

+3

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. –

Trả lời

4

các mã trạng thái đúng nếu bạn muốn có GET là , mặc dù 301 và 302 cũng sẽ thực hiện những gì bạn muốn trong các trình duyệt phổ biến.

Nếu điều này không hoạt động, điều gì đó khác có thể là sai. Một dấu vết HTTP sẽ hữu ích cho việc tìm kiếm những gì là sai.

+0

Sẽ cung cấp vào ngày mai. – Tomalak

3

Tôi không chắc chắn nhưng có vẻ như IE9 không thực sự gửi "POST" sau khi chuyển hướng 30x - nó chỉ hiển thị nó trong trình gỡ lỗi nội bộ của mình.

+2

Không chắc chắn nếu đó là vấn đề tương tự như OP, nhưng nó rất giống nhau (Post-Redirect-Get + IE9). Tôi vừa xác nhận rằng đó là trình gỡ lỗi trong trường hợp của tôi. –

+0

Tôi cũng vậy. Trong chế độ IE9, bảng Network dev nói POST-> POST cho 303 nhưng máy chủ cho biết nó đang nhận POST-> GET. :( – Ashley

2

Tôi nhận thấy hành vi tương tự. Hóa ra trình gỡ lỗi nội bộ của IE11 đã báo cáo một POST nhưng sử dụng một ứng dụng của bên thứ ba (Fiddler) nó báo cáo yêu cầu như là một GET. Nếu bạn thấy một POST trả lời cho một 303/302, hãy kiểm tra lại nó bằng ứng dụng bên ngoài.

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