Vì yêu cầu POST trong mẫu POST/Redirect/GET (PRG) trả về mã trạng thái (303 See Other
) thành công, có thể thông báo khách hàng của hương vị thành công cụ thể mà họ muốn tận hưởng (ví dụ: OK, Được tạo, Được chấp nhận, v.v.) cũng như bất kỳ tiêu đề thích hợp nào (ví dụ: Location
cho số 201 Created
, có thể xung đột với chuyển hướng)?POST/Redirect/GET (PRG) so với mã phản hồi 2xx có ý nghĩa
Ví dụ: để chuyển hướng GET có đáp ứng với mã phản hồi thích hợp & tiêu đề được mong đợi từ phản hồi POST không?
Các HTTP 1.1 spec nói:
Phương pháp này [303] tồn tại chủ yếu để cho phép đầu ra của một kịch bản POST-kích hoạt để chuyển hướng user agent tới một tài nguyên được chọn.
Nhưng không cung cấp bất kỳ thông tin chi tiết nào về việc mất mã trạng thái và tiêu đề thông thường hơn.
Edit - Một ví dụ:
Một khách hàng gửi yêu cầu POST để /orders
mà tạo ra một nguồn lực mới tại /orders/1
.
Nếu máy chủ gửi trạng thái 201 Created
với location: /orders/1
, khách hàng tự động sẽ vui vì nó biết tài nguyên đã được tạo và biết nó ở đâu, nhưng con người sử dụng trình duyệt web sẽ không hài lòng. trang /orders
một lần nữa và nếu họ làm mới, họ sẽ gửi một đơn đặt hàng khác, điều này dường như không phải là thứ họ muốn.
Nếu máy chủ gửi trạng thái 303 See Other
với location: /orders/1
, con người sẽ được đưa đến đơn đặt hàng của họ, được thông báo về sự tồn tại và trạng thái của nó và sẽ không có nguy cơ lặp lại nó một cách tình cờ. Tuy nhiên, khách hàng tự động sẽ không được nói rõ ràng về việc tạo tài nguyên, nó sẽ phải suy ra việc tạo dựa trên tiêu đề location
. Hơn nữa, nếu 303
chuyển hướng đến một nơi khác (ví dụ: /users/someusername/orders
) thì con người có thể được chứa đầy đủ, nhưng khách hàng tự động bị bỏ lại không đáng kể.
Đề nghị của tôi là để gửi 201 Created
như đáp ứng với yêu cầu get chuyển hướng trên tài nguyên mới, nhưng tôi càng nghĩ về nó, càng ít tôi thích nó (có thể là khó khăn để đảm bảo chỉ người tạo nhận 201
và nó không nên xuất hiện yêu cầu GET
đã tạo tài nguyên).
Phản ứng tối ưu trong tình huống này là gì?
Bạn có thể đưa ra ví dụ về suy nghĩ của bạn không? – Gumbo
Tôi đã chỉnh sửa câu hỏi để cung cấp một ví dụ. Cảm ơn. –
Chỉ cần rõ ràng: Bạn đã đảm bảo rằng một người dùng con người sẽ được thông tin đầy đủ về những gì vừa xảy ra, và bây giờ bạn đang cố gắng làm điều tương tự cho một người tự động? – sdleihssirhc