epoll_ctl: file exists ?
Maxim Dounin
mdounin на mdounin.ru
Пт Май 3 22:07:20 UTC 2019
Hello!
On Thu, May 02, 2019 at 11:53:38AM +0300, Vladimir Getmanshchuk wrote:
> Максим, если найдете свободную минуту - расскажите пожалуйста почему.
> Спасибо.
Потому что HTTP/2 не предусматривает возможности что-то делать с
соединением, в частности - connection-related-заголовки явно
запрещены стандартом[1]. А вебсокеты работают через Upgrade
соединения в другой протокол, с помощью заголовков "Upgrade:
websocket" и "Connection: upgrade". То есть вебсокеты явно
запрещены стандартом HTTP/2. И даже примечание есть:
Note: HTTP/2 purposefully does not support upgrade to another
protocol. The handshake methods described in Section 3 are
believed sufficient to negotiate the use of alternative protocols.
Если бы авторы протокола подумали головой и просто честно
определили мультиплексирование stream'ов - проблемы бы не было, и
мы бы это без особых проблем поддержали. Но нет. А поскольку
явно запрещено - то и пытаться поддерживать смысла нет.
Так что вебсокеты продолжают работать по HTTP/1.1. Что, впрочем,
представляется мне правильным - как протокол HTTP/2 оставляет
желать, и это далеко не единственная его проблема.
(Делались попытки вебсокеты таки в HTTP/2 впихнуть - в частности, в
прошлом году принят RFC 8441, "Bootstrapping WebSockets with
HTTP/2"[2]. Через 3 года после принятия стандарта HTTP/2. Но
это, скажем так, выглядит как хак, при этом малосовместимый с
существующей логикой работы через Upgrade, и имеет мало шансов
быть поддержанным.)
[1] https://tools.ietf.org/html/rfc7540#section-8.1.2.2
[2] https://tools.ietf.org/html/rfc8441
> On Tue, Apr 30, 2019 at 5:39 PM Maxim Dounin <mdounin at mdounin.ru> wrote:
>
> > Hello!
> >
> > On Tue, Apr 30, 2019 at 01:58:20PM +0500, Илья Шипицин wrote:
> >
> > > привет,
> > >
> > > насколько опасно вот такое ?
> > >
> > >
> > > 2019/04/29 21:52:39 [alert] 1714#1714: *168061675 epoll_ctl(1, 1188)
> > failed
> > > (17: File exists) while proxying upgraded connection, client:
> > > 82.114.112.115, server: market.kontur.ru, request: "GET /wsapi/
> > HTTP/2.0",
> > > upstream: "http://192.168.188.40:2339/wsapi/", host: "xxx.xxx.xxx"
> >
> > Судя по всему, имеет место попытка запихнуть вебсокеты в HTTP/2.
> > Работать - не будет.
[...]
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru