如何解决CORS,Laravel Valet和Socket.io
这感觉比原来要难得多。我正在为一个客户开发一个应用程序,并且尽力使此内容在本地运行。因此,我正在使用Laravel(通过Mac上的Valet提供服务),并且正在编写Socket.io服务器来处理不同的仪表板事件。 Socket.io在生产中将以HTTPS配置运行,并且我已在端口3001上运行。我都通过https提供内容,并在那里解决了所有配置问题。但是,现在我每次尝试连接时都无法停止收到CORS错误。
这是我遇到的错误:
CORS策略阻止从来源“ https://ags.test”访问“ https://ags.test:3001 / socket.io /?EIO = 3&transport = polling&t = 1605106550351-47”处的XMLHttpRequest :请求的资源上没有“ Access-Control-Allow-Origin”标头。
我对此进行了相当多的测试,发现如果我对快递服务器的根(/)进行GET请求,它可以正常工作并且没有CORS错误。但是,对上面错误中张贴的URL的轮询仍然提供相同的CORS错误。
如果现在还不是很明显的话,那么我对节点生态系统还是相当陌生的。因此,我所了解的是CORS从调用“ https://ags.test:3001”到“ https://ags.test:3001 / socket.io / *”时发生的情况。还是express根本不处理socket.io的CORS?
在其他stackoverflow答案中,我已经多次看到类似的东西(来自服务器)io.origins('*:*')
,用于设置原始策略。但是,我似乎找不到关于它的文档并调用它(或我见过的任何变体)
所以您知道我已经尝试过什么,这里是Socket.io Express服务器的服务器配置:
app.use(cors());
app.use((req,res,next) => {
res.header('Access-Control-Allow-Origin','*');
// authorized headers for preflight requests
// https://developer.mozilla.org/en-US/docs/Glossary/preflight_request
res.header('Access-Control-Allow-Headers','Origin,X-Requested-With,Content-Type,Accept');
next();
app.options('*',(req,res) => {
// allowed XHR methods
res.header('Access-Control-Allow-Methods','GET,PATCH,PUT,POST,DELETE,OPTIONS');
res.send();
});
});
var options = {
key: fs.readFileSync('./ags.test.key'),cert: fs.readFileSync('./ags.test.crt'),origins: '*:*',cors: true,};
const server = https.createServer(options,app);
我还调整了代客服务中的laravel网站配置,如此处https://gist.github.com/poul-kg/b669a76fc27afcc31012aa0b0e34f738所示,但直接应用于〜/ .config / valet / Nginx / ags.test并针对我的站点特定配置,然后重新启动。 / p>
如您所见,我已经尝试了很多不同的事情,并且正处于“让一切都陷入困境,看看有什么问题”的阶段,试图使这些服务器进行通信。有什么建议吗?
解决方法
好吧,我花了很长时间才弄清楚我所缺少的是什么。旧的stackoverflow答案显示了Socket.io v3不再支持的配置方法。
这是我在发布之日缺少针对Socket.io最新版本进行配置的内容。
const server = https.createServer(options,app);
const io = require('socket.io')(server,{
cors: {
origin: 'https://ags.test'
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。