Hãy xem xét các trường hợp sau đây:yêu cầu POST thất bại khi <sessionState cookie = "AutoDetect" /> được thiết lập
- Một máy chủ web đang chạy một ứng dụng .NET với
<sessionState cookieless="AutoDetect" />
. - Khách hàng đang đăng dữ liệu lên đó bằng cách sử dụng đơn giản
HttpWebRequest
(không có cookie).
Trường hợp dường như đơn giản này gây ra lỗi lớn.
Kể từ NET không thể xác định nếu các đại lý yêu cầu (HttpWebRequest
) hỗ trợ các tập tin cookie, nó đáp ứng các yêu cầu POST với 302 Tìm thấy chuyển hướng đến cùng một vị trí với:
- cookie có tên
AspxAutoDetectCookie
trong phản ứng - một tham số truy vấn tên
AspxAutoDetectCookie
ở vị trí chuyển tiếp
các đại lý yêu cầu sau đó được cho là yêu cầu vị trí mới, mà HttpWebRequest
làm. Khi .NET thấy AspxAutoDetectCookie
trong chuỗi truy vấn, nó biết đây là yêu cầu lại và có thể xác định xem cookie có được hỗ trợ hay không bằng cách xem cookie có tên là AspxAutoDetectCookie
nằm trong tiêu đề yêu cầu hay không.
Vấn đề là hầu hết các đại lý yêu cầu (trình duyệt web, HttpWebRequest
) xử lý 302 Tìm thấy như thể nó là 303 Xem Khác và yêu cầu lại GET, bất kể phương thức HTTP gốc! Mọi dữ liệu được gửi trong yêu cầu POST ban đầu sẽ không được chuyển tiếp.
Câu trả lời chính xác phải là Chuyển hướng tạm thời 307, không thay đổi phương thức yêu cầu. (Yêu cầu POST đối với vị trí X chuyển hướng đến một số POST yêu cầu đến vị trí Y.)
Có cách nào để thay đổi hành vi này trong .NET nên yêu cầu POST không bị hủy?
Information on 3xx redirection
Không hoạt động ở đây ít nhất. Vẫn giảm dữ liệu bài đăng. – Karlth
Nó hoạt động nếu chúng ta gắn thêm tiêu đề: 'Cookie: AspxAutoDetectCookie = 1'. – Artyom