首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >SSE >SSE如何处理跨域问题(CORS)?

SSE如何处理跨域问题(CORS)?

词条归属:SSE

1. 同源策略限制

浏览器默认遵循同源策略(Same-Origin Policy),EventSource对象只能连接与页面同源(协议、域名、端口均相同)的SSE端点,跨域请求会被浏览器直接拦截。与普通AJAX请求不同,EventSource不支持通过设置请求头的方式绕过同源限制,必须依赖服务器的CORS配置。

2. 服务端CORS响应头配置

服务器需在SSE 端点的HTTP响应头中添加Access-Control-Allow-Origin字段,将其设为允许的来源(如https://www.example.com)或*(允许所有来源,不推荐在生产环境中使用)。如需携带Cookie或HTTP认证信息,还需添加Access-Control-Allow-Credentials: true,同时注意:当该字段为true时,Access-Control-Allow-Origin不能设为*,必须明确指定允许的来源。

3. 客户端withCredentials配置

当SSE请求需要携带Cookie(如基于会话的认证)时,客户端创建EventSource对象需传入第二个参数:new EventSource(url, { withCredentials: true })。该配置会使浏览器在SSE请求中自动附带当前域下的Cookie,服务器据此可进行会话验证和权限控制。

4. 预检请求(Preflight)处理

标准的EventSource请求使用GET方法且不带自定义请求头,通常不会触发浏览器的CORS预检请求(OPTIONS)。但如果服务端对SSE端点添加了自定义认证头(如通过URL Query参数传递Token的除外方案),则需注意处理OPTIONS请求。大多数Web框架(如Express、Spring Boot )的CORS中间件已自动处理了预检请求,开发者只需正确配置允许的HTTP方法和请求头即可。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券