【发布时间】:2014-06-17 19:48:20
【问题描述】:
我正在尝试将 EventSource 用于与服务器的流式连接。但我需要在底层 XHR 请求上设置会话密钥标头。如果可能的话,我如何从 EventSource 对象访问 XHR?谢谢!
请注意,我不确定 EventStream 是否支持 CORS,这首先会阻止它为我工作,但我在某些地方读到它应该支持...
【问题讨论】:
标签: javascript stream long-polling server-sent-events
我正在尝试将 EventSource 用于与服务器的流式连接。但我需要在底层 XHR 请求上设置会话密钥标头。如果可能的话,我如何从 EventSource 对象访问 XHR?谢谢!
请注意,我不确定 EventStream 是否支持 CORS,这首先会阻止它为我工作,但我在某些地方读到它应该支持...
【问题讨论】:
标签: javascript stream long-polling server-sent-events
首先,好消息是几乎所有支持 SSE 的浏览器都支持并使用了 CORS。 (一年前就存在问题,因此只有在与坚持运行现代自动更新浏览器的过时版本的用户打交道时才会遇到问题,这是一种不寻常的组合。)
现在有个坏消息:您不能在 EventSource 请求上设置标头。如果您希望能够设置标头,则需要返回良好的 'ole XHR 流。
另一方面,cookie 是发送的,所以如果您的会话信息可以通过 cookie 发送,那么这将起作用。
另一方面,cookie 与 CORS 冲突;因此,如果您需要 SSE 和第三方网站的身份验证,您将会感到沮丧。您必须回退到使用 XHR。
为公然的插件道歉,但我所知道的关于这两个主题的最佳信息来源是my book on SSE 的第 9 章。这是最难写的一章:-)。
【讨论】:
另一种方法是通过 URL 发送您的授权令牌,并结合 HTTPS 仍然可以安全地防止令牌劫持。
【讨论】: