Tôi cần chuyển hướng người dùng đến trang web bên ngoài mặc dù yêu cầu POST.Một cách hay để chuyển hướng bằng yêu cầu POST?
Tùy chọn duy nhất tôi tìm ra là thực hiện việc gửi biểu mẫu thông qua JavaScript.
Bất kỳ ý tưởng nào?
Tôi cần chuyển hướng người dùng đến trang web bên ngoài mặc dù yêu cầu POST.Một cách hay để chuyển hướng bằng yêu cầu POST?
Tùy chọn duy nhất tôi tìm ra là thực hiện việc gửi biểu mẫu thông qua JavaScript.
Bất kỳ ý tưởng nào?
Sử dụng biểu mẫu có lẽ là tùy chọn duy nhất của bạn làm liên kết, chuyển hướng HTTP và <meta http-equiv="refresh" >
sẽ chỉ khiến trình duyệt tải một URL khác bằng phương thức GET.
Bạn không nhất thiết phải sử dụng JavaScript để gửi biểu mẫu. Nếu một số tương tác của người dùng được chấp nhận, bạn có thể sử dụng biểu mẫu với một số trường <input type="hidden">
và cho phép người dùng nhấn nút gửi.
Bạn cũng có thể muốn đảm bảo rằng trang bạn đang chuyển hướng đến chưa chấp nhận tham số GET. Một số tập lệnh chấp nhận cả GET và POST bừa bãi.
Javascript là cách duy nhất (để thực hiện tự động). Bạn chỉ không thể chuyển hướng yêu cầu POST
thông qua các phương thức tiêu chuẩn http
. Bạn có chắc chắn rằng GET
không phải là một tùy chọn ở đây không?
Chỉ cần đặt URL hành động của biểu mẫu HTML cho trang web bên ngoài cụ thể.
Dưới đây là một SSCCE, chỉ copy'n'paste'n'run nó:
<!doctype html>
<html lang="en">
<head>
<title>SO question 2604530</title>
</head>
<body>
<form action="http://stackoverflow.com/questions/2604530/answer/submit" method="post">
<textarea name="post-text"></textarea>
<input type="submit" value="Post Your Answer">
</form>
</body>
</html>
Bạn sẽ thấy rằng Stackoverflow có bảo vệ CSRF tốt;)
Đó không phải là khá rõ ràng những gì ý bạn là, vì vậy, hãy thực hiện một vài trường hợp:
Người dùng phải đăng biểu mẫu tới máy chủ khác với của riêng bạn
dễ dàng, chỉ cần xác định mục tiêu là hình thức hành động:
<form action="http://someotherserver.com" method="post">
tài nên được chuyển hướng sau một POST thành công trình
dễ dàng, chấp nhận và xử lý dữ liệu POST như thường lệ, sau đó phản hồi với tiêu đề chuyển hướng 302
hoặc 303
.
Người sử dụng cần gửi dữ liệu đến máy chủ của bạn, và sau khi xác nhận, bạn muốn POST dữ liệu đó để máy chủ khác
Hơi khó khăn, nhưng ba lựa chọn:
307
, điều này có nghĩa là người dùng nên thử cùng một yêu cầu tại một địa chỉ khác. Về mặt lý thuyết nó có nghĩa là trình duyệt nên POST cùng một dữ liệu đến một máy chủ khác. Tôi không hoàn toàn chắc chắn như thế nào hỗ trợ tốt này là, nhưng bất kỳ sự hiểu biết trình duyệt HTTP1.1 sẽ có thể làm điều đó. AFAIA nó không được sử dụng thường xuyên trong thực tế. Xem ở đây cho một danh sách của tất cả các tùy chọn HTTP chuyển hướng: http://en.wikipedia.org/wiki/Http_status_codes#3xx_Redirection
Tôi tình cờ biết rằng 307 chuyển hướng trên FF19 sẽ khiến Hộp thoại xác nhận xuất hiện. Không chắc chắn về các phiên bản trước đó. – rahulmohan
Bạn có thể làm rõ những gì bạn có nghĩa là bằng cách đó? Bạn muốn gửi/chuyển tiếp dữ liệu POST tới một máy chủ khác? Bạn muốn trình duyệt người dùng chuyển hướng sau khi đã gửi yêu cầu? Thứ gì khác...? – deceze