2010-08-27 7 views
5

Tập lệnh sẽ được gọi từ một URL như example.com/photo.php?id=123 hoặc example.com/photos/123 tùy thuộc vào việc các URL đẹp có được bật hay không.Tôi có nên ném 404 đến yêu cầu như /photo.php?id=123 nếu ảnh # 123 không tồn tại không?

Nếu ảnh # 123 không tồn tại, yêu cầu example.com/photos/123 sẽ phát ra lỗi 404. Nhưng, những gì về example.com/photo.php?id=123?

+0

404 có phải là tùy chọn xử lý lỗi duy nhất của bạn không? Không có cách nào để xử lý hình ảnh không tồn tại một cách duyên dáng, chẳng hạn như chuyển hướng đến 'example.com/photo.php'? – bta

+0

Tất nhiên điều phải làm là biến nó thành một 404 duyên dáng ... Một cái gì đó giống như http://stackoverflow.com/foo – JanC

Trả lời

3

RFC có liên quan là 2616, cụ thể là các phần trên status codes, requestsURIs. Cụ thể, chuỗi truy vấn được coi phần của URI, do đó, một 404 là câu trả lời thích hợp vì nó có nghĩa là:

Các máy chủ đã không tìm thấy bất cứ điều gì phù hợp với các yêu cầu-URI.

Nếu bạn có thể biết rằng ảnh đã bị xóa vĩnh viễn, bạn có thể trả lại 410.

Tôi sẽ không trả lại 200 và nói "không tìm thấy kết quả nào".

1

Điều đó phụ thuộc, tôi giả sử.

Nếu photo.php?id=123 là trang hiển thị ảnh có id là 123, thì có, nó sẽ ném 404. 404 có nghĩa là tài nguyên không tìm thấy khi được mong đợi - đây là ngữ nghĩa chính xác.

Tuy nhiên, trên cơ hội kỳ quặc ý định ngữ nghĩa của bạn cho photo.php?id=123 là một trang tìm kiếm cho ảnh có id 123, thì hoàn toàn chính xác để trả lại 200 bằng thông báo cho biết không có kết quả nào trả lại.

Cuối cùng, nó không tạo ra một số lượng lớn sự khác biệt. Tôi không làm quen với cách các mã phản hồi HTTP ảnh hưởng đến cách công cụ tìm kiếm lập chỉ mục trang của bạn, nhưng tôi cho rằng 404 sẽ không được lập chỉ mục theo cùng một cách. Có thể bạn không muốn trang được lập chỉ mục nếu không có gì để hiển thị.

TL; DR tôi sẽ ném 404.

+0

"Cuối cùng, nó không tạo ra một số lượng lớn sự khác biệt." Nó cho các công cụ tìm kiếm. Tôi không phải là một chuyên gia và tôi không biết mở rộng, nhưng nếu bạn luôn trả về 200 với cùng một nội dung, bạn có nhiều trang trỏ đến cùng một nội dung. Tôi nghĩ rằng điều này là xấu .. –

0

Có, bạn nên ném một 404 nếu nó chưa bao giờ tồn tại:

Các máy chủ đã không tìm thấy bất cứ điều gì phù hợp với các yêu cầu-URI. Không có dấu hiệu nào được đưa ra cho dù tình trạng này là tạm thời hay vĩnh viễn.

Nhưng nếu nó đã tồn tại trước đó, bạn nên đáp ứng một 410:

Tài nguyên yêu cầu không còn có sẵn tại máy chủ và không có địa chỉ giao nhận là biết

Từ Status Code Definitions

+0

Liên kết đó xác nhận rằng 404 thực tế áp dụng cho toàn bộ URI, bao gồm chuỗi truy vấn. Tôi đã sợ rằng một 404 trên photo.php? Id = 123 sẽ dọa các trình duyệt tải ảnh.php? Id = 334, nhưng có vẻ như đó không phải là trường hợp. –

0

Tôi nghĩ bạn nên ném 404. Điều này bạn có thể dễ dàng tạo bằng cách sử dụng tệp .htaccess,

Hy vọng điều đó sẽ giúp ích,

3

Bạn nên xem cả hai URL ...?id=123.../123 giống nhau, vì chúng giống nhau - chúng chỉ có một chút khác biệt.

Và có, bạn nên ném 404 - Không tìm thấy lỗi gây ra tài nguyên nhất định không tồn tại. Tuy nhiên, các trang 404 không bao giờ nên trông giống như:

404 Không tìm thấy - bạn đang @ # $ @ # $ @!

cho URL như ...photo.php nên chứa một danh sách các nguồn gợi ý (ảnh khác nhau mà người dùng có thể muốn truy cập), một số loại hình thức tìm kiếm - nói cách khác: nó phải là một trang cho phép tôi làm một cái gì đó thay vì chỉ cần ném thông báo lỗi.