Можно ли вернуть HTTP 401 для несуществующего ресурса вместо 404, чтобы предотвратить раскрытие информации?

Вдохновленный мыслью при просмотре вопроса « Правильный код состояния HTTP, когда ресурс доступен, но недоступен из-за разрешений », я воспользуюсь тем же сценарием, чтобы проиллюстрировать свой гипотетический вопрос.

Представьте, что я создаю веб-службу совместного использования автомобилей.

Предположим, следующее

GET /api/persons/angela/location

извлекает текущую позицию пользователя «angela». Только сама Анджела и возможный водитель, который собирается ее забрать, должны иметь возможность узнать ее местоположение, поэтому, если запрос не аутентифицирован для соответствующего пользователя, возвращается ответ 401 Unauthorized .

Также рассмотрите запрос

GET /api/persons/john/location

, когда ни один пользователь с именем john не зарегистрировался в системе. Ресурсов Джона нет, не говоря уже о местонахождении Джона, так что это, очевидно, возвращает 404 Not Found . Или нет?

Что, если я не хочу раскрывать, зарегистрирован ли john в системе?

(Возможно, имена пользователей взяты из небольшого пула университетских логинов, и здесь наблюдается очень активный кругозор группа в университетском городке, которая очень смутно смотрит на использование автомобилей, даже если вы объединяете их? Они могут делать запросы к URL-адресу для каждого пользователя, и если они получат 401 вместо 404, сделайте вывод, что пользователь является сборщиком автомобилей)

Имеет ли смысл возвращать 401 Unauthorized для этого запроса, даже если ресурс не существует и нет возможного набора учетных данных, который мог бы быть предоставлен в запросе, чтобы сервер возвращал 200 ?

35
задан Community 23 May 2017 в 12:25
поделиться