Я пытаюсь расширить сервер с HTTP / 2 , который уже поддерживает HTTP / 1.1 с TLS v1.2 .Я пишу это в Go , где я определяю конфигурацию tls следующим образом -
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{cert},
ServerName: "mysrvr",
NextProtos: []string{"h2", "http/1.1", "http/1.0"},
Time: time.Now,
Rand: rand.Reader,
}
Как очевидно, я использовал строку " h2 " для настройки ALPNhandshake.
Теперь, когда я делаю запрос через curl, я получаю этот запрос -
$ curl -v https://127.0.0.1:8000 -k --http2
Когда я анализирую запрос, он показывает, что вместо него сначала отправляется метод PRI GET -
HTTP/2.0
PRI
Я получил некоторое представление о методе PRI из https://tools.ietf.org/html/rfc7540#page-78, в котором говорится следующее -
This method is never used by an actual client.
This method will appear to be used when an HTTP/1.1 server or
intermediary attempts to parse an HTTP/2 connection preface.
У меня сейчас вопрос: почему был отправлен запрос PRI , когда сервер явно поддерживает HTTP / 2 ?Нужно ли анализировать его и отвечать пустым кадром SETTINGS в соответствии со спецификацией HTTP / 2, или должна была позаботиться об этом среда исполнения Go http2?
Я использую http.ReadRequest
анализировать клиентские запросы, но это не работает для HTTP / 2 запросов, даже когда я игнорирую PRI запросов (как предложено ниже).