UAT环境下Angular前端与.NET Core Web API跨域(CORS)异常问题排查求助
各位大佬好!我最近在UAT环境部署Angular前端和.NET Core Web API时碰到了棘手的CORS跨域问题,SIT环境用完全一样的代码部署都没问题,UAT这边却卡壳了,而且我现在不能改代码,只能调整配置,想请大家帮忙分析下可能的原因!
问题详情:
- 初始错误现象:
访问前端地址https://myappuat.returnsportal.test.local时,控制台抛出CORS错误:
Access to XMLHttpRequest at 'https://myappuat.portalshellapi.test.local/api/portalmodule' from origin 'https://myappuat.returnsportal.test.local' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
- 尝试的解决操作:
我在后端的web.config里添加了CORS相关的自定义头配置,代码如下:
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="https://myappuat.returnsportal.test.local" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" /> </customHeaders> </httpProtocol> </system.webServer>
- 新出现的错误:
添加上述配置后,错误变成了多Origin不允许的问题:
Access to XMLHttpRequest at 'https://myappuat.portalshellapi.test.local/api/portalmodule ' from origin 'https://myappuat.returnsportal.test.local ' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values ''https://myappuat.returnsportal.test.local, 'https://myappuat.returnsportal.test.local ', but only one is allowed.
对比正常的SIT环境:
SIT环境部署的是完全相同的代码,前端地址是 https://myappsit.returnsportal.test.local,后端API地址是 https://myappsit.portalshellapi.test.local/api/portalmodule,整个跨域流程完全正常,没有任何CORS相关错误。
我的疑问:
因为代码完全一致,只有UAT环境出问题,而且我现在不能修改业务代码,只能调整配置。会不会是UAT服务器(IIS)的某些额外配置导致的?比如IIS本身自动添加了CORS头,和我在web.config里加的冲突了?或者有其他服务器层面的设置影响了跨域头的输出?
麻烦各位大佬帮忙指点下排查方向,谢谢!
内容来源于stack exchange

