Tôi tìm thấy cách giải quyết tiếp theo. Bạn có thể thoát khỏi chuyển hướng sau khi xử lý POSTyêu cầu bằng cách thao tác historyđối tượng.
Vì vậy, bạn có dạng HTML:
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
Khi bạn xử lý biểu mẫu này trên máy chủ của mình, bạn thay vì chuyển hướng người dùng đến /the/result/pagebằng cách thiết lập Locationtiêu đề như thế này:
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>

Sau khi xử lý POSTdữ liệu ed, bạn kết xuất nhỏ <script>và kết quả/the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
Các <script>bạn nên làm:
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
Kết quả là:

như bạn có thể thấy dữ liệu biểu mẫu được POSTchuyển thành process.phptập lệnh.
Kịch bản lệnh này xử lý POSTdữ liệu ed và kết xuất /the/result/pagecùng một lúc với:
- không chuyển hướng
- không có
POSTdữ liệu lại khi bạn làm mới trang (F5)
- không gặp lại
POSTkhi bạn điều hướng đến trang trước / trang tiếp theo thông qua lịch sử trình duyệt
CẬP NHẬT
Như một giải pháp khác, tôi yêu cầu tính năng yêu cầu nhóm Mozilla FireFox cho phép người dùng thiết lập NextPagetiêu đề sẽ hoạt động giống như Locationtiêu đề và làm cho post/redirect/getmẫu bị lỗi thời.
Nói ngắn gọn. Khi máy chủ xử lý POSTdữ liệu mẫu thành công, nó:
- Thiết lập
NextPagetiêu đề thay vìLocation
- Kết xuất kết quả xử lý
POSTdữ liệu biểu mẫu vì nó sẽ hiển thị cho GETyêu cầu theo post/redirect/getmẫu
Trình duyệt lần lượt khi thấy NextPagetiêu đề:
- Điều chỉnh
window.locationtheo NextPagegiá trị
- Khi người dùng làm mới trang, trình duyệt sẽ thương lượng
GETyêu cầu NextPagethay vì tạo lại POSTdữ liệu
Tôi nghĩ rằng điều này sẽ xuất sắc nếu được thực hiện, phải không? =)