Выбор ответа Middle WebSocket и SSE обновлено

Авторизация в EventSource

Вопрос

Фронт хочет передать в EventSource заголовок Authorization: Bearer .... Что верно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: EventSource не ставит свои заголовки: авторизуют кукой или читают поток через fetch. Конструктор EventSource(url, { withCredentials }) принимает только флаг кук.

Варианты ответа

  1. Достаточно передать вторым аргументом конструктора { headers: { Authorization } }
  2. EventSource сам возьмёт токен из localStorage и подставит его в заголовок Authorization
  3. Заголовок задаётся через es.setRequestHeader('Authorization', ...) до открытия потока
  4. EventSource не ставит свои заголовки: авторизуют кукой или читают поток через fetchправильный ответ

Разбор

Конструктор EventSource(url, { withCredentials }) принимает только флаг кук. Опции headers и метода setRequestHeader у него нет, это есть у fetch и XMLHttpRequest. Поэтому либо кука, либо ручное чтение text/event-stream через fetch и ReadableStream. Сам браузер ничего из localStorage не подставляет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.