Должен ли я бросить 404 на запрос, как /photo.php?id=123, если фото # 123 не существует? - PullRequest
5 голосов
/ 27 августа 2010

Сценарий будет вызываться с URL-адреса, например example.com/photo.php?id=123 или example.com/photos/123, в зависимости от того, включены ли красивые URL-адреса.

Если фото # 123 не существует, запрос к example.com/photos/123 должен выдать ошибку 404. Но как насчет example.com/photo.php?id=123?

Ответы [ 5 ]

3 голосов
/ 27 августа 2010

Соответствующим RFC является 2616, в частности разделы кодов состояния , запросов и URI . В частности, строка запроса считается частью URI, поэтому 404 является правильным ответом, поскольку означает:

Сервер ничего не нашел соответствующий Request-URI.

Если вы знаете, что фотография была окончательно удалена, вы можете вернуть 410.

Я бы не вернул 200 и не сказал бы "ничего не найдено".

3 голосов
/ 27 августа 2010

Вы должны относиться к URL-адресам ...?id=123 и .../123 одинаково, потому что они равны - они просто имеют немного другую форму.

И да, вы должны выбросить 404 - Не найдено Причина ошибки: данный ресурс не существует.Однако 404 страницы никогда не должны выглядеть так:

404 Не найдено - вы @ # $ @ # $ @!

404 для URL вроде ...photo.php должен содержаться список предлагаемых ресурсов (разные фотографии, которые пользователь может захотеть посетить), какая-то форма поиска - другими словами: это должна быть страница, которая позволяет мне делать что-то, а не просто выдавать ошибкусообщение.

1 голос
/ 27 августа 2010

Это зависит, я полагаю.

Если photo.php?id=123 - это страница, показывающая фотографию с идентификатором 123, то да, она должна выбросить 404. 404 означает, что ресурс не был найден, когда онОжидалось, что он будет найден - это семантически правильно.

Тем не менее, есть вероятность, что ваше семантическое намерение для photo.php?id=123 состояло в том, чтобы это была страница , ищущая для фотографии сс идентификатором 123, тогда совершенно правильно вернуть 200 с сообщением о том, что результаты не возвращены.

В конечном счете, это не имеет большого значения.Я не очень хорошо знаком с тем, как коды ответов HTTP влияют на то, как поисковые системы индексируют вашу страницу, но я подозреваю, что 404 не будут индексироваться таким же образом.Вы, вероятно, не хотите, чтобы страница была проиндексирована, если там нечего отображать.

TL; DR Я бы выбросил 404.

0 голосов
/ 27 августа 2010

Я думаю, вы должны выбросить 404. Это вы можете легко сделать, используя файл .htaccess,

Надеюсь, что поможет,

0 голосов
/ 27 августа 2010

Да, вы должны выбросить 404, если он никогда не существовал:

Сервер не нашел ничего, соответствующего Request-URI.Не указано, является ли состояние временным или постоянным.

Но если он существовал раньше, вы должны ответить 410:

Запрошенный ресурс больше не доступен на сервере, и адрес переадресации не известен

С Определения кода состояния

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...