Комментарии 5
Ни в http.Server (https://pkg.go.dev/net/http#Server), ни в http2.Server (https://pkg.go.dev/golang.org/x/net/http2#Server) нет поля Protocol, которое предлагается менять.
И вот что говорит официальная документация (https://pkg.go.dev/net/http#hdr-HTTP_2):
The http package's Transport and Server both automatically enable HTTP/2 support for simple configurations. To enable HTTP/2 for more complex configurations, to use lower-level HTTP/2 features, or to use a newer version of Go's http2 package, import "golang.org/x/net/http2" directly and use its ConfigureTransport and/or ConfigureServer functions. Manually configuring HTTP/2 via the golang.org/x/net/http2 package takes precedence over the net/http package's built-in HTTP/2 support.
Статья - галлюцинация AI?
Из комментария к оригиналу:
I would recommend to specify, that the code containing http protocols parts relies on go 1.24, which haven't been released yet.
Короче ждем Go1.24
Да, в 1.24 действительно есть/будет - https://pkg.go.dev/net/http@go1.24rc2#Server
В переводе по какой-то причине это упущено.
UPD. Уже и в перевод добавлено
Неясно, почему первая версия — дефолт, когда соединение не шифруется. По всем статьям вторая выгоднее, даже безопаснее — вон и \r\n
в заголовках нет. У второй есть какой-то фатальный недостаток?
В том виде, как написано, Head Of Line Blocking вредит и HTTP2, т.к. это общая проблема для TCP.
Но у пайплайнинга HTTP1.1 есть и свой Head Of Line Blocking: если обработка полученного запроса очень долгая, ответы на следующие запросы (а чаще всего, и их обработка) вынуждены будут ждать.
А с HTTP2 этой проблемы нет: сервер может получить, обработать и послать ответ на следующие запросы, не дожидаясь, пока закончится обработка (или даже получение) предыдущего.
Вот только не понятно, зачем остальные усложнения HTTP2. Сквозной HPACK, push потоки (которые в итоге отмерли) - вот ерунда, экономия на спичках. Давно уже был FastCGI, который, как протокол, решил проблему отправки конкурентных запросов. Жалко, правда, что реализаций полноценных его мало :-( (в Nginx реализация не полноценная).
Как работает HTTP/2 и как использовать его в Go