我正在开发一个需要访问 CORS 资源的应用程序。在应用程序中,用户可以更改他们的子域(即 - 从 mysubdomain.myapp.com 到 mynewsubdomain.myapp.com)。
服务器读取原始 header 并将该子域添加到 CORS 请求的允许来源。
我的问题是,在用户更改其子域后,我执行了一个简单的 window.location.href = mynewsubdomain
重定向,但这导致资源加载(JS 和样式)失败并出现错误:
来自源“http://localhost:7000”的字体已被跨源资源共享策略阻止加载:“Access-Control-Allow-Origin” header 的值为“http://old.myapp.dev”那不等于提供的来源。因此不允许访问来源“http://new.myapp.dev”。
检查 Chrome 中的网络请求,我可以看到请求 header 中的来源仍然是 http://old.myapp.dev
,这似乎是这里的问题。随后的页面加载工作正常。有什么我可以做的吗?我可以指示浏览器使用正确的(新的)子域作为来源吗?我应该以不同的方式重定向吗?
MDN 关于更改 window.location.href
是这样说的:“请注意,像 CORS 这样的安全设置可能会阻止这种情况的发生”。但是没有太多信息可以帮助解决这个问题。
最佳答案
当我试图从另一个子域获取相同的文件时,我遇到了同样的问题。
通过在响应中添加“Vary: Origin” header 解决了这个问题。引用:https://forums.aws.amazon.com/thread.jspa?messageID=378304
希望这对你也有用。
关于javascript - 浏览器在 JS 重定向后发送错误/先前的源 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25987836/