Что является надлежащим ответом HTTP для посылания за запросами, которые требуют SSL/TLS

Я разрабатываю УСПОКОИТЕЛЬНЫЙ API, где некоторые вызовы общедоступны по HTTP, и некоторые требуют ключа API и шифрования по HTTPS. Я размышляю относительно того, какой код ответа должен быть отправлен, если Запрос HTTP отправляется в один из частных ресурсов. До сих пор единственный, который выскакивает во мне, 412 - Неудавшееся Предварительное условие, но стандарт указывает, что предварительное условие наложено запрашивающей стороной не сервер.

Существует ли соответствующий код ответа для этого условия, или я должен просто подать и сделать 400?

45
задан gtd 11 November 2017 в 23:08
поделиться

3 ответа

Я не могу сказать, принято ли это HTTP клиентами, но если говорить строго по RFC, сервер должен отвечать:

HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade

Source:
http://tools.ietf.org/html/rfc2817#section-4.2

28
ответ дан 26 November 2019 в 21:29
поделиться

Соответствующий код ошибки для возврата будет аналогичен 403.4 - Требуется SSL .

Хотя это явно не задокументировано в RFC для HTTP 1.1 , такое поведение соответствует изложенным там требованиям:

Сервер понял запрос, но отказывается его выполнить. Авторизация не поможет и запрос НЕ ДОЛЖЕН повторяться. Если метод запроса не был HEAD и сервер желает обнародовать причину невыполнения запроса, он ДОЛЖЕН описать причину отказа в объекте. Если сервер не желает предоставлять эту информацию клиенту, вместо этого можно использовать код состояния 404 (Not Found).

Добавление собственного подкода (как в примере с SSL) может быть полезным в некоторых случаях, но, поскольку этот подкод не будет иметь смысла для третьих лиц, я бы не рекомендовал его.

Итак, ваше последнее сообщение об ошибке будет примерно таким: «403 - Частный ресурс». Обратите внимание, что даже в случае отсутствия ключа API нельзя использовать «401 - Unauthorized», если только ваш ключ API не может быть фактически передан в поле заголовка WWW-Authenticate.

6
ответ дан 26 November 2019 в 21:29
поделиться

Просто отправьте перенаправление на соответствующий https: URI.

ОБНОВЛЕНИЕ

Это неправильный ответ - см. Комментарии ниже

0
ответ дан 26 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: