我在Laravel中为我的项目创建了一个自定义中间件。它添加了以下标题:
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With')
->header('Access-Control-Allow-Credentials',' true');
中间件似乎对Postman工作得很好。当我通过Postman触发一个POST请求时,你会注意到头部已经被添加到响应中:
然而,对于Chrome来说,这似乎不起作用。查看从Google Chrome返回的头文件(相同的请求,使用axios进行调用):
这将导致Google Chrome控制台出现以下错误:
从源“http://localhost:3000”访问“http://127.0.0.1:8000/auth/jwt/token "处的XMLHttpRequest已被CORS策略阻止:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我做错了什么/导致了这个奇怪的问题?
3条答案
按热度按时间r1zhe5dt1#
与其创建自定义的Laravel中间件,我强烈建议使用Laravel CORS Package。没有必要重新发明轮子。
wwtsj6pe2#
只需将类似的脚本放在文件的顶部,并使用die()。
如果你能翻译成Laravel,那就更好了。实现示例为here。
rfbsl7qr3#
我知道这篇文章有点旧,现在Laravel在Roll/cors.php文件中提供了一个集成的cors解决方案,但关于这一点一直令人头痛的是,有一行写着“路径”。
这是主要的问题,让这个值就像这样:
或者在你的API中为每个路由插入一个数组,你的cors问题就解决了!只是为了澄清,Cors不是一个防火墙, Postman 不发送飞行前或其他一些额外的信息,Chrome做。