EventSource 连接中的自定义 headers

Custom headers in EventSource connection

当我在 JavaScript 中创建一个新的 EventSource 来监听 server-sent 事件时,像这样:

var source = new EventSource("data/pushed");

我可以在传出的 HTTP 请求中指定额外的 headers(比如一些身份验证令牌)吗?

不,EventSource standard 不像 XMLHttpRequest 那样包含 setRequestHeader

也不支持POST。但你确实有饼干。因此,在可行的情况下,我首选的身份验证令牌方法是让用户首先登录并创建会话,然后该会话 cookie 将与您的 SSE 请求一起传递。 (另外:如果使用 PHP,并使用 SSE 会话,请记住它们是锁定的,因此您的 SSE 进程应在验证用户后立即调用 session_write_close()。其他语言的会话可能有类似的问题。)

我可以建议的唯一其他替代方法是使用 XMLHttpRequest(即 Comet 方法)。

我们遇到了类似的问题,最后我们决定通过 URL 发送我们的授权令牌而不用担心安全问题,因为它会受到 SSL 的保护(当然,在生产中,我们使用 HTTPS协议)。