Ví dụ về 302 so với 303


22

Sự khác biệt giữa a 302303phản ứng là gì?

http://www.w3.org/Prot Protocol / rfc2616 / rfc2616-sec10.html

  • 10.3.3 302 Tìm thấy
  • 10.3.4 303 Xem Khác

Là những cái này có thể hoán đổi cho nhau hoặc tại sao cái này sẽ được sử dụng hơn cái kia? Bạn có thể vui lòng cung cấp một trường hợp sử dụng khi nào một cái sẽ được sử dụng (và cái kia sẽ không)?

Câu trả lời:


35

Mô tả trên trang mà bạn liên kết dường như khá mô tả về mục đích dự định của họ:

Chuyển hướng 302 chỉ ra rằng chuyển hướng là tạm thời - khách hàng nên kiểm tra lại URL gốc trong các yêu cầu trong tương lai.

Chuyển hướng 303 có nghĩa là chuyển hướng một POSTyêu cầu đến một GETtài nguyên (nếu không, máy khách giả định rằng phương thức yêu cầu cho vị trí mới giống như đối với tài nguyên ban đầu).

Nếu bạn đang chuyển hướng một ứng dụng khách như một phần của ứng dụng web của mình nhưng mong muốn chúng luôn bắt đầu tại ứng dụng web (ví dụ: trình rút ngắn URL), thì chuyển hướng 302 dường như có ý nghĩa. Chuyển hướng 303 được sử dụng khi bạn nhận POSTdữ liệu từ máy khách (ví dụ: gửi biểu mẫu) và bạn muốn chuyển hướng chúng đến một trang web mới để được truy xuất bằng cách sử dụng GETthay vì POST(ví dụ: yêu cầu trang tiêu chuẩn).

Nhưng hãy xem ghi chú này từ các định nghĩa mã trạng thái - hầu hết các khách hàng sẽ làm điều tương tự cho 302 hoặc 303:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.

4
Rõ ràng nhưng sai. Chuyển hướng 303 không vĩnh viễn. RFC tuyên bố "Phản hồi 303 KHÔNG PHẢI được lưu vào bộ nhớ cache" . Mô tả bạn đã đưa ra ở đây khớp với chuyển hướng 301.
Ladadadada

2
Mea culpa. Tôi đã có 301 và 303 ngược. Tôi đã cập nhật câu trả lời.
larsks

bây giờ có 308
Miranda

Tôi nghĩ rằng đó là một chút sai lầm khi đề xuất rằng 303 là "có nghĩa" để chuyển hướng một POST thành một điểm dừng hoàn toàn. Thông số kỹ thuật gợi ý rằng 303 liên quan nhiều hơn đến tính khả dụng của việc thể hiện tài nguyên thông qua phương thức được yêu cầu ban đầu. Ví dụ: nếu tôi có một hình ảnh được bảo vệ quyền lớn chỉ dành cho người dùng được xác thực, tôi có thể sử dụng một chiếc 303 để chuyển hướng người dùng không được xác thực sang hình ảnh nhỏ hơn. Phương thức yêu cầu được sử dụng trong trường hợp như vậy là không liên quan.
đèn hiệu

RFC cho biết "Phương thức này tồn tại chủ yếu để cho phép đầu ra của tập lệnh được kích hoạt POST để chuyển hướng tác nhân người dùng đến tài nguyên đã chọn." và "Phản hồi cho yêu cầu có thể được tìm thấy theo một URI khác và NÊN được truy xuất bằng phương thức GET trên tài nguyên đó". Tôi nghĩ rằng khá nhiều điều phù hợp với những gì tôi đã nói (tất cả những năm trước đây), nhưng tôi chắc chắn có chỗ để giải thích.
larsks

15

Có bốn loại chuyển hướng khác nhau (hiện tại). Ban đầu chỉ có hai nhưng hầu hết các khách hàng đã thực hiện chuyển hướng 302 không chính xác để thêm hai lần nữa để làm rõ sự khác biệt giữa hai hành vi có thể khác nhau khi nhận 302.

RFC mà bạn đã liên kết với trạng thái này trong phần trên 302 chuyển hướng:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. Chuyển hướng 301 là một chuyển hướng vĩnh viễn. Nó có thể lưu trong bộ nhớ cache và mọi dấu trang cho URL này phải được cập nhật để trỏ đến URL mới.
  2. Chuyển hướng 302 là một chuyển hướng tạm thời. Nó không được lưu trong bộ nhớ cache theo mặc định và nên được yêu cầu lại mỗi lần (nhưng bạn có thể ghi đè lên phần này bằng các tiêu đề bộ đệm). Yêu cầu tiếp theo nên sử dụng cùng một phương thức (POST, GET, CONNECT, PUT, DELETE, v.v.) như yêu cầu ban đầu và đối với bất kỳ điều gì khác ngoài yêu cầu GET và HEAD, khách hàng nên nhắc người dùng trước khi thực hiện yêu cầu. Đây là phần mà khách hàng đã sai và hầu hết họ thay đổi phương thức cho yêu cầu tiếp theo thành GET, bất kể phương thức ban đầu.
  3. Chuyển hướng 303 giống như 302 ngoại trừ yêu cầu theo dõi hiện được thay đổi rõ ràng thành yêu cầu GET và không cần xác nhận.
  4. Chuyển hướng 307 giống như 302 ngoại trừ yêu cầu tiếp theo hiện rõ ràng giống với yêu cầu ban đầu và xác nhận phải được lấy từ người dùng cho các phương thức yêu cầu khác với GET và HEAD.

Khách hàng lớn tuổi có thể không hiểu chuyển hướng 303. Bất cứ điều gì tạo ra yêu cầu HTTP / 1.1 đều phải hiểu phản hồi 303.

Có thể coi 300 và 305 phản hồi là một chuyển hướng, có nghĩa là có sáu loại khác nhau.


0

Các loại chuyển hướng (301.302.303 ...) được sử dụng có nhiều tác động đến cách các công cụ tìm kiếm sẽ lập chỉ mục và xếp hạng nội dung. Một số nhện thậm chí có thể từ chối lập chỉ mục nội dung được chuyển hướng tạm thời. Chi tiết có thể được tìm thấy trong các tài liệu SEO khác nhau ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.