7.x 版本如何正确的实现跨域?

环境

windows + IIS10 + PHP cgi映射
没有任何官方推荐的环境,直接7.0离线包部署干拉

问题

7.x版本以前一直使用中间件里面加header信息

header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:GET,POST,PUT,DELETE');
header('Access-Control-Allow-Headers:Origin, Content-Type, Cookie, Accept');
header('Access-Control-Allow-Credentials:true');

换了7.x失效,我怎么查资料设置都无法跨域 ,然后发现7.x自带有config/cors.php文件

    'paths' => ['api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => false,
    'max_age' => false,
    'supports_credentials' => false,

全局中间件确实包含

\Fruitcake\Cors\HandleCors::class,

我参阅了几篇站内跨域设置还是无法实现跨域

这个不该是自动生效吗?旧方法不管用,新方法不知如何生效,请问我要怎样才能解决跨域问题

参考

以下是调用接口信息

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

自动生效不需要配置,如果是自定义路由文件,需要在paths数组中加入路由前缀,默认是路由包含api/*前缀的请求自动响应

3年前 评论
Aiyi (楼主) 3年前
讨论数量: 5

自动生效不需要配置,如果是自定义路由文件,需要在paths数组中加入路由前缀,默认是路由包含api/*前缀的请求自动响应

3年前 评论
Aiyi (楼主) 3年前

我是升级上来的,按这个库的教程安装,发布配置文件。
一开始添加到路由分组中间件中,发现不生效,调试了根本没运行,必须添加到全局中间件中才运行。 结果还是没效果,原来是默认配置的 paths 中为空,它是循环这个路径的,给直接跳过了,必须添加 * 或者合适的 api/* 之类,然后才好了。

3年前 评论

没用啊什么情况

3年前 评论
Aiyi (楼主) 3年前
Talentisan (作者) 3年前

Access to XMLHttpRequest at 'jianzhi.com/api/video_v2/login' from origin 'http://192.168.20.7:8081' 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 '*, *', but only one is allowed.

3年前 评论
Aiyi (楼主) 3年前
Talentisan (作者) 3年前
Talentisan (作者) 3年前

多半是因为重复设置了跨域造成的,laravel7.x本身默认支持api跨域,如果你在本地搭建环境是可以跨域的,但是如果你的nginx也设置了Access-Control-Allow-Origin:*,会造成你的第一个错误,所以应该禁用laravel的跨域,在中间件吧\Fruitcake\Cors\HandleCors::class注释掉,在nginx上做跨域就行了,或者laravel默认跨域,nginx不设置跨域也行,我自己的问题就是如此处理

3年前 评论
Talentisan 3年前
Talentisan 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!