Подходящий код статуса HTTP - PullRequest
1 голос
/ 24 января 2011

Мое веб-приложение использует ajax, и я проверяю, является ли запрос ajax или нет через php-коды. Если нет, то я генерирую ошибку 404, в противном случае запускаю php коды, связанные с функцией ajax.

Если пользователь или поисковый паук пытаются перейти на страницу функции ajax (например, / books / ajax / books_list), веб-приложение возвращает 404 не найденного кода состояния, и я вижу много 404 ошибок в инструментах Google для веб-мастеров.

Я должен изменить код состояния 404, но какой из них подходит для этого условия? Может быть "406 не приемлемо"?

Ответы [ 4 ]

1 голос
/ 24 января 2011

Я думаю, что 403 (Запрещено), вероятно, лучше всего описывает это. Ресурс есть, но вы решили, что не собираетесь предоставлять доступ к этому ресурсу, и даже аутентификация пользователя не поможет.

0 голосов
/ 24 января 2011

Насколько я понимаю, пауки SE немного пугливы, если видят ошибки, указывающие на проблемы с сервером.(406 может указывать на плохо реализованный сервер.) 404 не описывает то, что вы ищете, поскольку ресурс есть, но 403 (запрещено) просто сообщает пауку, что эта страница не для них.Вы также можете использовать файл robots.txt.

0 голосов
/ 24 января 2011

Не уверен, как вы определяете, является ли это правильный запрос Ajax.Если вы ожидаете, что это будет POST, но паук использует GET, тогда он должен быть 405. (Метод не разрешен).

Вы не должны использовать 406: это означает «неприемлемо», в том смысле, что выне может поддерживать заголовки HTTP Accept:, отправленные браузером.Скорее всего, это будет неверно (так как вы, вероятно, вообще не проверяете заголовки Accept).

Если вы действительно отклоняете запрос, потому что он поступает от неавторизованного клиента, тогда 403 подходит.

0 голосов
/ 24 января 2011

Я бы предложил вам вернуть те 406, которые вы предложили.Единственные альтернативы, которые стоит рассмотреть: «501 не реализовано»

The server does not support the functionality required to fulfill the request.
This is the appropriate response when the server does not recognize the request
method and is not capable of supporting it for any resource

и «403 Запрещено»

The server understood the request, but is refusing to fulfill it. 
Authorization will not help and the request SHOULD NOT be repeated. 
If the request method was not HEAD and the server wishes to make
public why the request has not been fulfilled, it SHOULD describe 
the reason for the refusal in the entity. If the server does not 
wish to make this information available to the client, the status
 code 404 (Not Found) can be used instead. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...