Дать пользователю 404, если строка запроса отсутствует? - PullRequest
2 голосов
/ 14 апреля 2009

Скажите, что мне требуется строка запроса; например "itemid". Если эта строка запроса по какой-то причине отсутствует, я должен дать пользователю страницу с ошибкой 200 или «404 Not Found»?

Я бы предпочел 404, но я не совсем уверен.

Ответы [ 6 ]

7 голосов
/ 14 апреля 2009

Может быть, вы должны дать «400 плохих запросов».

Запрос не может быть понят сервером из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.

См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html для дополнительных возможностей.

И, как сказал Крис Симпсон, укажите «404 Not Found», когда не найден элемент для соответствующего идентификатора элемента.

Вы также можете проверить популярные API RESTful, чтобы увидеть, как другие справились с этой проблемой. Например Twitter .

1 голос
/ 14 апреля 2009

Вы должны дать пользователю 200, только когда на полученный HTTP-запрос был дан ответ с соответствующим ответом, даже если это всего лишь простой HTML-код, который говорит, что в нем отсутствует параметр. Код 404 - это когда пользовательский агент запрашивает ресурс, который отсутствует.

Проверьте этот список для получения дополнительной информации http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

1 голос
/ 14 апреля 2009

С точки зрения юзабилити, я бы сказал, что нет.

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

Если ссылка идет с другой страницы вашего сайта (или другого сайта), то страница, которая сообщает им, что запрошенный элемент не был найден, и перенаправляет их на соответствующую страницу, возможно, ту, которая позволяет им просматривать элементы?

Если пользователь сам наберет строку запроса, то мне придется спросить, почему? Поскольку URI обычно не удобен для пользователя.

1 голос
/ 14 апреля 2009

Хороший вопрос. Лично я бы использовал 200 и предоставил бы дружественную пользователю ошибку, объясняющую проблему, но это действительно зависит от обстоятельств.

Не могли бы вы показать 404, если они предоставили предмет, но конкретный предмет не существовал?

0 голосов
/ 14 апреля 2009

Как я вижу, это работает, вы должны вернуть 200 - потому что это должен быть допустимый ресурс.

Допустим, один из ваших URL-адресов widgets.com/browse.php?itemid=100 - и этот URL отображает определенный элемент в вашем каталоге.

Теперь пользователь вводит widgets.com/browse.php - что мы ожидаем от действия? Конечно, чтобы перечислить все элементы в вашем каталоге (или, по крайней мере, разбитый на страницы).

Переосмыслите свою структуру URL и то, как уровни и параметры каталога связаны друг с другом.

0 голосов
/ 14 апреля 2009

Дайте ошибку 500, возможно, 501. Это позволит браузеру или коду обрабатывать его с помощью существующих механизмов onError, вместо того, чтобы прислушиваться к нему каким-либо пользовательским способом.

...