Вдохновленный мыслью, глядя на вопрос «Correct HTTP status code when resource is available but not accessible because of permissions», я буду использовать тот же сценарий, чтобы проиллюстрировать мой гипотетический вопрос.Можно ли вернуть HTTP 401 для несуществующего ресурса вместо 404, чтобы предотвратить раскрытие информации?
Представьте, что я создаю веб-сервис с автопокрытием.
Предположим следующее
GET /api/persons/angela/location
возвращает текущее положение пользователя "Анджела". Только сама ангелочка и возможный водитель, который собирается ее забрать, должны знать ее местоположение, поэтому, если запрос не аутентифицирован соответствующему пользователю, возвращается ответ 401 Unauthorized.
рассмотреть также просьбу
GET /api/persons/john/location
, когда ни один пользователь по имени Джон не зарегистрирован в системе. Нет ресурса john, не говоря уже о ресурсе для местоположения john, поэтому это, очевидно, возвращает 404 Not Found. Или это?
Что делать, если я не хочу раскрывать, зарегистрирован ли john в системе?
(Возможно, имена пользователей взяты из небольшого пула университетских логинов, и в кампусе есть очень воинственная группа по велоспорту, которая принимает очень тусклый взгляд на использование автомобиля, даже если вы собираете? URL для каждого пользователя, и если они получат 401 вместо 404, сделайте вывод, что пользователь является автоматом)
Имеет смысл вернуть 401 Unauthorized для этого запроса, хотя ресурс не существует и существует невозможно установить набор учетных данных, которые могут быть предоставлены в запросе, чтобы сервер возвращал 200?
+1 для правильного использования «infer» (и для интересного вопроса). –
Некоторые изобретательные решения здесь и некоторые интересные обсуждения. Всем спасибо. – Day
+1 для воинствующего велосипедного лобби. Я должен присоединиться к моему местному отделению! –