Socket.io-client: Прикрепленные сеансы на основе файлов cookie (повторное открытие)

Созданный на 28 сент. 2017  ·  12Комментарии  ·  Источник: socketio/socket.io-client

Наш проект состоит из набора микросервисов nodejs, взаимодействующих через socket.io. Некоторые из этих микросервисов работают за балансировщиком нагрузки amazon ALB. Единственная доступная привязка сеанса, доступная для целевых групп ALB, основана на файлах cookie, а соединения распределяются с использованием алгоритма циклического перебора, когда файл cookie сеанса не указан в HTTP-запросе.

Это эффективно нарушает протокол рукопожатия, возникающий при установке соединения socket.io, что приводит к ужасному ответу xhr poll error 400.

Обходной путь состоит в том, чтобы полностью отключить опрос xhr в клиенте и полагаться только на фактический веб-сокет. Это идеально в контролируемой среде, но не работает, когда некоторые сервисы разрабатываются и размещаются третьими сторонами.

Также существует другой хак, который состоит в переопределении базового вызова функции require('http').request и выдаче предварительного запроса для получения этих файлов cookie сеанса. Дальнейшие HTTP-запросы будут повторно вставлять файлы cookie в запрос. В лучшем случае я называю это взломом.

См. липкие сеансы ALB
Еще один запрос на ту же функцию #775

Needs documentation

Самый полезный комментарий

@AndyGOBrien Один из обходных путей — сначала получить файлы cookie с сервера, а затем открыть сокетное соединение, указав параметр extraHeaders.Cookie следующим образом:

const socket = io(url, {
  extraHeaders: {
    Cookie: cookiesString
  }
})

Документы: https://github.com/socketio/engine.io-client#nodejs -with-extraheaders

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

Есть новости по этому поводу?

кто-нибудь когда-нибудь решить это?

@AndyGOBrien Один из обходных путей — сначала получить файлы cookie с сервера, а затем открыть сокетное соединение, указав параметр extraHeaders.Cookie следующим образом:

const socket = io(url, {
  extraHeaders: {
    Cookie: cookiesString
  }
})

Документы: https://github.com/socketio/engine.io-client#nodejs -with-extraheaders

@turpault во время рукопожатия установлен файл cookie io : https://github.com/socketio/engine.io#methods -1

image

Да, я заставил это работать. Спасибо, парни

@AndyGOBrien ты делал это в браузере или в узле? я могу заставить его работать в узле, но в браузере я не могу установить заголовок cookie

socket.io-client-v2.1.1 в настоящее время опция extraHeaders.Cookie работает только на NodeJS

2018-08-17 0 49 07

2018-08-17 0 51 46

в Webpack 3.11.0 /Mac 10.13.6/Google Chrome 67.0.3396.87

@AndyGOBrien Один из обходных путей — сначала получить файлы cookie с сервера, а затем открыть сокетное соединение, указав параметр extraHeaders.Cookie следующим образом:

const socket = io(url, {
  extraHeaders: {
    Cookie: cookiesString
  }
})

Документы: https://github.com/socketio/engine.io-client#nodejs -with-extraheaders

Любой рабочий пример? Спасибо

Предупреждение. Приведенное выше решение не обрабатывает тайм-аут AWSALB. Если сокет попытается переподключиться после тайм-аута прилипания (т.е. 24 часов), он выдаст transport error .

socket.io-client-v2.1.1 в настоящее время опция extraHeaders.Cookie работает только на NodeJS

2018-08-17 0 49 07

2018-08-17 0 51 46

в Webpack 3.11.0 /Mac 10.13.6/Google Chrome 67.0.3396.87

У меня такая же проблема. повезло, что он уже исправлен?

@Seldonm @gabmontes @59naga повезло, что кто-нибудь когда-нибудь успешно справился с ExtraHeaders?
Я вообще не умею.

Есть новости по этому поводу? Существуют балансировщики нагрузки, которые работают только с липкой сессией Cookie, например Traefik...

https://github.com/containous/traefik/issues/1035

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