Я разрабатываю УСПОКОИТЕЛЬНЫЙ API, где некоторые вызовы общедоступны по HTTP, и некоторые требуют ключа API и шифрования по HTTPS. Я размышляю относительно того, какой код ответа должен быть отправлен, если Запрос HTTP отправляется в один из частных ресурсов. До сих пор единственный, который выскакивает во мне, 412 - Неудавшееся Предварительное условие, но стандарт указывает, что предварительное условие наложено запрашивающей стороной не сервер.
Существует ли соответствующий код ответа для этого условия, или я должен просто подать и сделать 400?
Я не могу сказать, принято ли это HTTP клиентами, но если говорить строго по RFC, сервер должен отвечать:
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade
Соответствующий код ошибки для возврата будет аналогичен 403.4 - Требуется SSL .
Хотя это явно не задокументировано в RFC для HTTP 1.1 , такое поведение соответствует изложенным там требованиям:
Сервер понял запрос, но отказывается его выполнить. Авторизация не поможет и запрос НЕ ДОЛЖЕН повторяться. Если метод запроса не был HEAD и сервер желает обнародовать причину невыполнения запроса, он ДОЛЖЕН описать причину отказа в объекте. Если сервер не желает предоставлять эту информацию клиенту, вместо этого можно использовать код состояния 404 (Not Found).
Добавление собственного подкода (как в примере с SSL) может быть полезным в некоторых случаях, но, поскольку этот подкод не будет иметь смысла для третьих лиц, я бы не рекомендовал его.
Итак, ваше последнее сообщение об ошибке будет примерно таким: «403 - Частный ресурс». Обратите внимание, что даже в случае отсутствия ключа API нельзя использовать «401 - Unauthorized», если только ваш ключ API не может быть фактически передан в поле заголовка WWW-Authenticate.
Просто отправьте перенаправление на соответствующий https: URI.
ОБНОВЛЕНИЕ
Это неправильный ответ - см. Комментарии ниже