SSE над https не работает

68
8

У меня проблема с SSE по https, позвольте мне пояснить, у меня есть сервер Nginx, который слушает https, и Rails Puma в спину, Так что у меня это в js (coffescript):

initStream = () ->
rechargePayment.source = new
EventSource('/proggress/stream')

и в контроллере рельсов у меня есть:

  def stream
response.headers['Content-Type'] = 'text/event-stream'
redis = Redis.new
redis.psubscribe(['proggress.refresh', 'heartbeat']) do |on|
on.pmessage do |_pattern, event, data|
response.stream.write("event: #{event}\n")
response.stream.write("data: #{data}\n\n")
end
end
rescue IOError
logger.info 'Stream stoped'
ensure
logger.info 'Stopping Stream Thread'
redis.quit
response.stream.close
end

Когда я пытаюсь выполнить это через https, он ничего не делает, в журналах я вижу только ошибку: "Стрим закрыт", но если я попробую его по http, он отлично работает.

EDIT: Я видел это: "Интерфейс EventSource используется для приема событий, отправленных сервером. Он подключается к серверу через HTTP и принимает события в формате text/event-stream без закрытия соединения".

источник: https://developer.mozilla.org/en-US/docs/Web/API/EventSource

Итак, значит ли это, что он работает только в http?

спросил(а) 2017-09-22T22:27:00+03:00 2 года, 9 месяцев назад
1
Решение
85

Так что да, проблема была в nginx, мне пришлось установить эти настройки:

proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;

и в контроллере rails добавьте это:

response.headers['X-Accel-Buffering'] = 'no'

ответил(а) 2017-09-28T23:48:00+03:00 2 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема