我已经创建了一个网关API(Spring Boot)来路由到前端(Typescript)的许多后端服务(Spring Boot应用程序),但是当前端尝试访问网关API时,我不断收到CORS错误,即使它在 Postman 上运行良好。
这是我在控制台上遇到的错误:
从源“http://localhost:3000”获取“https://gatway-api-ip-address:port/level/global”的访问已被 CORS 策略阻止:“Access-Control-Allow-” Origin' 标头包含多个值“http://localhost:3000、http://localhost:3000”,但只允许使用一个。让服务器发送带有有效值的标头,或者,如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
这是我在网关 API 中的 application.yml:
cloud:
gateway:
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins:
- "http://localhost:3000"
- "http://localhost:8000"
- "http://frontend-ip-address:port"
allowCredentials: true
allowedMethods:
- GET
- POST
- DELETE
- GET
- OPTIONS
allowedHeaders: "*"
注意:每个后端服务、前端服务和网关 API 的 IP 地址与托管在一台 Digital Ocean 服务器上的相同。
注意:我已经为网关API颁发了自签名的ssl证书
当然,目标资源也有自己的 CORS 配置,这就是它重复的原因。如果您可以控制目标资源,请在目标资源上禁用 CORS,或者使用过滤器从请求中删除 Origin 标头。
filters:
- RemoveRequestHeader=Origin