Trạng thái HTTP 400 có thể thay thế cho 410 không?


7

Khi tôi chuyển nhiều URL trên trang web của mình từ không thân thiện sang thân thiện, tôi đã bắt gặp một URL cũ được sử dụng để kiểm tra rằng google sau đó đã kết thúc quá trình quét nhưng giờ tôi không còn sử dụng URL nữa. Nó ở dạng không thân thiện như thế này:

http://example.com/something.php?something=something&

Trước đây, URL đó khớp với một trang khác trên trang web của tôi và để khắc phục nó, tôi đã phải thay đổi mã trạng thái (và làm cho URL không trả về một trang web thực tế). Lúc đầu, tôi nghĩ sử dụng mã 410 để chỉ ra google, nhưng bây giờ tôi thấy trạng thái http 400 tốt hơn bởi vì tất cả các URL "sạch" khác của tôi không bao giờ chứa &trong đó và trạng thái http 400 là yêu cầu không đúng.

Đây có phải là một thực tế chấp nhận được? hoặc tôi chỉ nên chuyển đổi nó sang trạng thái http 410? Công cụ tìm kiếm sẽ nghĩ gì về thực hành này? (Tôi chỉ đang cố gắng tuân theo các tiêu chuẩn ở đây)


Sẽ không 301 (di chuyển vĩnh viễn) thành http://example.com/something.php?something=somethinghữu ích? Hay điều đó cũng không tồn tại?
Hagen von Eitzen

Có và không bởi vì một số url (đặc biệt là những người không thân thiện) đã từng tồn tại không còn tồn tại.
Mike

Câu trả lời:


27

Tại sao 410 đi?

Vì trang đã tồn tại, trả về trạng thái tiêu đề chính xác sẽ là 410 , điều này sẽ thông báo cho Google và các công cụ tìm kiếm khác để loại bỏ trang khỏi chỉ mục của nó. Bạn nên tránh sử dụng trạng thái 400 yêu cầu xấu vì điều này ngụ ý rằng máy chủ không hiểu yêu cầu do cú pháp không đúng. Sử dụng mã trạng thái không mong muốn sẽ điền vào nhật ký lỗi của bạn và có thể khiến lỗi tìm kiếm khó khăn hơn trong các vấn đề thực tế.

Còn 404 thì sao?

Sử dụng trạng thái 404 hoặc 410 được coi là ok, tuy nhiên, nếu bạn biết trang này sẽ không bao giờ quay lại thì tốt nhất nên sử dụng 410. Google đã nói rằng họ đối xử với kết quả của 404 và 410 như nhau nhưng 410 bị giảm nhanh hơn do thực tế là 404 có thể xảy ra khi không có ý định.


5
+1, đã đồng ý. Phản hồi " 404 Không tìm thấy " cũng sẽ là một lựa chọn hợp lệ ở đây.
Ilmari Karonen

@IlmariKaronen "Đã qua" khác với "Không tìm thấy."
Anubian Noob

2
@AnubianNoob: "Đã qua", đúng hơn, là một tập hợp con của "Không tìm thấy"; nếu nó biến mất, nó sẽ không còn được tìm thấy nữa. Thật vậy, mã trạng thái 410 Gone đã được thêm vào trong HTTP / 1.1 về cơ bản như là một phiên bản 404 cụ thể và rõ ràng hơn, để cho các máy chủ chỉ ra rõ ràng rằng một tài nguyên hợp lệ trước đây đã bị xóa một cách có chủ ý và trái ngược (trái ngược với, chỉ là vô tình hoặc tạm thời không thể truy cập).
Ilmari Karonen

@IlmariKaronen đúng, nhưng các quản trị viên có thể ủng hộ 410 vì họ giảm nhanh hơn 404.
Simon Hayter

15

Chính thức, có. Bất kỳ trạng thái 4xx có thể được hiểu là 400; điều tương tự cũng xảy ra với các nhóm trạng thái khác. (Ví dụ: lỗi dịch vụ 503 không khả dụng có thể được hiểu là lỗi 500 máy chủ nội bộ.)

RFC được viết theo cách này để cho phép các triển khai có thể không hỗ trợ mọi trạng thái và cũng để cho phép các mã trạng thái bổ sung được xác định mà không phá vỡ tính tương thích ngược.

Vì vậy, có, bạn có thể sử dụng 400 thay vì 410. Tuy nhiên, bạn nên sử dụng trạng thái chính xác nhất có sẵn cho bạn để mô tả trạng thái hiện tại; nếu tài nguyên không còn nữa, sẽ không bao giờ quay trở lại và không thể tìm thấy (theo hiểu biết của bạn) ở bất kỳ nơi nào khác, 410 là trạng thái thích hợp. Tôi có thể sử dụng 404 trước 400.

Tham chiếu cho hành vi này là RFC 7231 (HTTP 1.1: Ngữ nghĩa và Nội dung), Phần 6 . (Lưu ý rằng RFC 7231 và những người khác thay thế RFC 2616. )


2

Yêu cầu không đúng định nghĩa không có nghĩa là "một URL bạn không có tài nguyên cho". Nó có nghĩa là yêu cầu không đúng. HTTP 400 chắc chắn sai ở đây.

HTTP 410 hoạt động tốt vì nó chỉ ra rằng tài nguyên có thể truy cập trước đó không còn nữa.

Sự thay thế của bạn, như những người khác đã đề cập, sẽ là 404.

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.