Ответ на запрос на обновление WebSocket - PullRequest
0 голосов
/ 10 мая 2018

У меня есть сервер WebSocket, который получает запросы на обновление WebSocket от разных клиентов. На основе параметров запроса или пути запроса иногда серверу необходимо отклонить эти запросы на обновление. Сервер должен отменить рукопожатие не потому, что он не поддерживает протокол или из-за нарушения протокола клиентом, а из-за других упомянутых причин.

Существует ли стандартный код состояния для ответа в этом сценарии? Спецификация , по-видимому, не определяет код состояния ответа для этого случая. Здесь также упоминается, что если клиент нарушает протокол, сервер должен ответить «400 неверных запросов», но в ответе на отправку не упоминается, если сервер просто хочет отменить рукопожатие по какой-то другой причине.

Может ли сервер выбрать ответ с любым кодом состояния, не нарушая протокол?

1 Ответ

0 голосов
/ 10 мая 2018

На эти URL серверу разрешено отвечать, как будто он ничего не знает о WebSockets. Так что простая ошибка 400 - это прекрасно. От вас не требуется отображать дополнительную информацию в теле или добавлять дополнительные заголовки.

А в более крупных настройках сервера обычно существует обратный прокси-сервер, который принимает каждый входящий запрос и перенаправляет эти запросы в соответствующие приложения на основе URL-адреса, и это будет реальной проблемой, если протоколы на основе HTTP потребуют, чтобы это обратный прокси должен был знать все протоколы.

Как только рукопожатие клиента было отправлено, клиент ДОЛЖЕН дождитесь ответа от сервера перед отправкой дальнейших данных. Клиент ДОЛЖЕН проверить ответ сервера следующим образом:

  1. Если код состояния, полученный с сервера, не равен 101, клиент обрабатывает ответ в соответствии с процедурами HTTP [RFC2616].

Ошибка 400 описывается как:

6.5.1. 400 Неверный запрос

Код состояния 400 (неверный запрос) указывает, что сервер не может или не будет обрабатывать запрос из-за того, что воспринимается как ошибка клиента (например, синтаксис некорректного запроса, неверный запрос) фрейм сообщения или обманчивая маршрутизация запросов).

Что также соответствует запросу на обновление для URL, который не поддерживает этот протокол.

Коды ошибок 4xx определены следующим образом:

6,5. Ошибка клиента 4xx

Класс статуса кода 4xx (Ошибка клиента) указывает, что клиент похоже ошибся За исключением случаев ответа на запрос HEAD, Сервер ДОЛЖЕН послать представление, содержащее объяснение ошибка ситуации, и является ли она временной или постоянной состояние. Эти коды состояния применимы к любому методу запроса. Пользовательские агенты ДОЛЖНЫ отображать любое включенное представление пользователю.

Таким образом, ответ с 400 статусами и без дополнительной информации действителен, потому что это не обязательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...