Должен ли сервер WebSocket обрабатывать только запросы GET? - PullRequest
0 голосов
/ 17 мая 2018

У меня написан сервер WebSocket, который обрабатывает только запросы на обновление, которые являются запросами GET. Если приходит запрос POST или любой другой вид с необходимыми заголовками, он обрабатывается HTTP-сервером.

В спецификации прямо не указано, что запрос на обновление WebSocket должен быть запросом GET. Если запрос на обновление не является запросом GET, должен ли сервер обрабатывать его как запрос на обновление WebSocket, передавать его на обработку HTTP-серверу или отвечать на него кодом состояния, например 400 Bad Request?

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

1 Ответ

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

Из , раздел 4.1 (Требования клиента) спецификации webSocket, там написано:

Метод запроса ДОЛЖЕН быть GET, а версия HTTP ОБЯЗАНА. быть не менее 1,1

А затем в разделе 4.2.1 (чтение вступительного рукопожатия клиента) спецификации webSocket говорится следующее:

Открывающее рукопожатие клиента состоит из следующих частей. Если сервер, читая рукопожатие, обнаруживает, что клиент сделал не отправить рукопожатие, которое соответствует описанию ниже (обратите внимание, что как согласно [RFC2616], порядок полей заголовка не важен), включая, но не ограничиваясь, любые нарушения грамматики ABNF указанный для компонентов рукопожатия, сервер ДОЛЖЕН остановиться обрабатывает рукопожатие клиента и возвращает HTTP-ответ с соответствующий код ошибки (например, 400 неверный запрос).

  1. HTTP / 1.1 или более поздний GET-запрос, включая «Request-URI» [RFC2616], который следует интерпретировать как / имя ресурса / определено в разделе 3 (или абсолютный URI HTTP / HTTPS, содержащий / имя ресурса /).

Итак, есть несколько мест, где говорится, что http-запрос должен быть GET.


Что касается ваших конкретных вопросов:

Должен ли сервер WebSocket обрабатывать только запросы GET?

Да, соединение webSocket всегда будет начинаться с запроса GET, а не с POST или любого другого метода.

Если запрос на обновление не является запросом GET, должен ли сервер обрабатывать его как запрос на обновление WebSocket, должен ли он передать его на обработку HTTP-серверу или он должен ответить на него кодом состояния, например 400 Bad Request?

Как описано в приведенной выше справочной части спецификации, сервер должен ответить кодом состояния, таким как 400 Bad Request.

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

Да.

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