Из , раздел 4.1 (Требования клиента) спецификации webSocket, там написано:
Метод запроса ДОЛЖЕН быть GET, а версия HTTP ОБЯЗАНА.
быть не менее 1,1
А затем в разделе 4.2.1 (чтение вступительного рукопожатия клиента) спецификации webSocket говорится следующее:
Открывающее рукопожатие клиента состоит из следующих частей. Если
сервер, читая рукопожатие, обнаруживает, что клиент сделал
не отправить рукопожатие, которое соответствует описанию ниже (обратите внимание, что как
согласно [RFC2616], порядок полей заголовка не важен),
включая, но не ограничиваясь, любые нарушения грамматики ABNF
указанный для компонентов рукопожатия, сервер ДОЛЖЕН остановиться
обрабатывает рукопожатие клиента и возвращает HTTP-ответ с
соответствующий код ошибки (например, 400 неверный запрос).
- 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?
Да.