浏览器默认遵循同源策略(Same-Origin Policy),EventSource对象只能连接与页面同源(协议、域名、端口均相同)的SSE端点,跨域请求会被浏览器直接拦截。与普通AJAX请求不同,EventSource不支持通过设置请求头的方式绕过同源限制,必须依赖服务器的CORS配置。
服务器需在SSE 端点的HTTP响应头中添加Access-Control-Allow-Origin字段,将其设为允许的来源(如https://www.example.com)或*(允许所有来源,不推荐在生产环境中使用)。如需携带Cookie或HTTP认证信息,还需添加Access-Control-Allow-Credentials: true,同时注意:当该字段为true时,Access-Control-Allow-Origin不能设为*,必须明确指定允许的来源。
当SSE请求需要携带Cookie(如基于会话的认证)时,客户端创建EventSource对象需传入第二个参数:new EventSource(url, { withCredentials: true })。该配置会使浏览器在SSE请求中自动附带当前域下的Cookie,服务器据此可进行会话验证和权限控制。
标准的EventSource请求使用GET方法且不带自定义请求头,通常不会触发浏览器的CORS预检请求(OPTIONS)。但如果服务端对SSE端点添加了自定义认证头(如通过URL Query参数传递Token的除外方案),则需注意处理OPTIONS请求。大多数Web框架(如Express、Spring Boot )的CORS中间件已自动处理了预检请求,开发者只需正确配置允许的HTTP方法和请求头即可。