我正在使用Docker Compose来调出两个Docker容器:
nginx
容器运行WebPacked Vue.js应用程序并侦听端口9090。node
容器在AdonisJS项目中运行npm start
并侦听端口3333. 目标是使用AJAX将文件从http://website.com:9090
上传到http://website.com:3333
,然后发回成功回复。在本地开发中,CORS不是问题,所有请求都很好。但是,当部署到"生产" (或计划生产)我在Firefox的JS控制台中收到以下错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://lemcoe.nato:3333/uploader. (Reason: CORS
request did not succeed).
查看Firefox中的“网络”选项卡,我看到OPTIONS
和POST
(实际上传文件的请求)请求。 OPTIONS
请求似乎是成功的,这些是请求的请求和响应标头:( lemcoe.nato
在本地使用DNS指向website.com
,在此图片中)
然而,文件上传从未实际发生过。以下是从未收到响应的POST请求的标头:
这是AdonisJS' config/cors.js
配置文件:
module.exports = {
origin: '*',
methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE'],
headers: true,
exposeHeaders: false,
credentials: false,
maxAge: 90
}
我已经尝试了我能想到的那些设置的每种组合,并且我已尽我所能确保所有端口都在Docker中正确映射。然而,当尝试执行文件上传到后端容器时,所有Web浏览器仍然显示CORS错误。
我应该从哪里开始调试此问题?我相信项目对初始OPTIONS
请求的响应是令人满意的,但在涉及此过程的第二步时,我必须遗漏一些内容。我觉得有趣的是,当相同的确切代码在相同端口上本地运行但没有Docker时,一切都按预期运行,并且控制台中从不提及CORS。只有当两个项目在同一个Docker主机上隔离(具有相同的端口和域)时,CORS问题才会成为问题。
谢谢!