Websocket: [вопрос] почему заголовки Sec-WebSocket-Extensions не поддерживаются программой обновления.

Созданный на 17 сент. 2019  ·  6Комментарии  ·  Источник: gorilla/websocket

Я неправильно понял ваш исходный вопрос @ marti1125 , теперь, когда я понимаю, что вы задавали связанный, но все же немного отдельный вопрос, я создал новую проблему для этого, используя функцию «ссылка в новой проблеме».

Исходный комментарий выглядит следующим образом:


Я пытаюсь понять подпротоколы на примере клиент / сервер

Я просто изменяю https://github.com/gorilla/websocket/blob/master/examples/echo/server.go#L23

c, err := upgrader.Upgrade(w, r, r.Header)

в терминале показать upgrade:websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported

_ Первоначально опубликовано @ marti1125 в https://github.com/gorilla/websocket/issues/404#issuecomment -531591181_

question

Все 6 Комментарий

Как отмечено в OP, я переместил это из исходной проблемы, чтобы оставить эту проблему в задаче. Чтобы ответить на сам вопрос; Я считаю (после небольшого чтения), что это действительно связано с включенной (экспериментальной) реализацией RFC7692.

Для этого посмотрите https://godoc.org/github.com/gorilla/websocket#hdr -Compression_EXPERIMENTAL
У вас должна быть возможность включить сжатие через логическое значение, а не прикреплять заголовок самостоятельно.

@elithrar Эта проблема решена и может быть закрыта.

@nhooyr Могу я узнать, в какой версии было решено?
Я использую v1.4.2, и когда я передаю r.Header я получаю ту же ошибку, что и @ IngCr3at1on.

conn, err := upgrader.Upgrade(w, r, r.Header)
websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported

websocket: специфичные для приложения заголовки Sec-WebSocket-Extensions не поддерживаются

Таким образом, эта ошибка заголовка означает, что вы устанавливаете Sec-WebSocket-Extensions перед вызовом Upgrade. Вам просто нужно прекратить это делать, поскольку вы не можете использовать собственное расширение (которое не является сжатием RFC 7692 ).

Вам просто нужно перестать это делать

перестаньте передавать r.Header в Upgrade (), вы имеете в виду?

спасибо за ссылочную ссылку. Я вижу

  1. Согласование расширений
    Чтобы предложить использование PMCE, клиент ДОЛЖЕН включить имя расширения
    PMCE в поле заголовка "Sec-WebSocket-Extensions" своего
    открытие рукопожатия соединения WebSocket.

так что не уверен, когда ты сказал

вы не можете использовать собственное расширение

Это то, что я получаю в качестве ответа и запроса в браузере. если я передам r.Header в Upgrade() .
image


Кстати, я использую пример чата гориллы именно для клиентской стороны и никаких изменений в его js-коде. с другой стороны, на сервере я не отправляю никаких настраиваемых или ручных заголовков в ответ на запрос клиента.

Итак, чтобы избежать этой ошибки, чтобы просто получить результат, я могу проверить происхождение вручную, чего я не делаю, это уровень производства / правильное решение!

var Upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,

    CheckOrigin: func(r *http.Request) bool {
        if r.Header.Get("Origin") == "http://localhost:9090" {  // <=====
            return true
        }
        return false
    },
}                                                             

Могу я спросить, каков надлежащий / производственный уровень решения?


Кроме того, в этом примере я вижу, что они передают nil как responseHeader . Итак, если нам нужно передать nil, почему функция имеет параметр responseHeader ?

func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error)

Я думаю, вы не понимаете, для чего нужен responseHeader. См. Документацию по Upgrade и изучите его исходный код.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги