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