问答 / 0 / 6 / 创建于 6年前 / 更新于 6年前
因为你实现的代码就是返回了 405 啊,你可以调试一下自己的代码,postman 使用 options。
你是为了验证 cors 到底有没有用?
CORS 照理论上是不应该走到业务的, 你检查下中间件注册成功了?
@liyu001989 postman 也是返回405,不过我的 php 代码不是允许 options 请求了吗,为什么响应头中会没有允许呢? header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS'); 我是想验证下,我刚才改了下 nginx 的配置加上下面就好了
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
if ($request_method = OPTIONS ) { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE"; add_header Access-Control-Max-Age "3600"; add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, FOO"; add_header Content-Length 0; add_header Content-Type text/plain; return 200; }
为什么直接改 PHP代码就不行呢,我的代码写错了?如果是,那正确应该怎么写呢?
@XiaohuiLam 我这只是个测试,没用框架。
@Mjlove OPTIONS请求应该直接返回NO CONTENT的,
可能
你可以看你的 RESPONSE 头, 有没有 x-powered-by: php *,如果有就是 PHP (你的代码)返的,否则就是NGINX返的
@XiaohuiLam 我刚试了下
或许 nginx 自动挡下了 options 请求吧。
同样的 nginx 配置(注释掉跨域配置),如果使用 laravel 框架加上本教程的扩展包就能访问成功。也不知到问题究竟出在哪里
如果你的项目也是安装dingo/api的组件的话,如下图:
你可以在config/api配置里面配置下中间件,如下图配置:
. . . . 'middleware' => [ 'crouss.request' => \Fruitcake\Cors\HandleCors::class ],
这样就可以解决这个问题了,具体可以看下dingo/api扩展包的相应部分的源码
我要举报该,理由是:
因为你实现的代码就是返回了 405 啊,你可以调试一下自己的代码,postman 使用 options。
你是为了验证 cors 到底有没有用?
CORS 照理论上是不应该走到业务的,
你检查下中间件注册成功了?
@liyu001989 postman 也是返回405,不过我的 php 代码不是允许 options 请求了吗,为什么响应头中会没有允许呢?
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
我是想验证下,我刚才改了下 nginx 的配置加上下面就好了
为什么直接改 PHP代码就不行呢,我的代码写错了?如果是,那正确应该怎么写呢?
@XiaohuiLam 我这只是个测试,没用框架。
@Mjlove OPTIONS请求应该直接返回NO CONTENT的,
可能
你可以看你的 RESPONSE 头, 有没有 x-powered-by: php *,如果有就是 PHP (你的代码)返的,否则就是NGINX返的
@XiaohuiLam 我刚试了下
或许 nginx 自动挡下了 options 请求吧。
But
同样的 nginx 配置(注释掉跨域配置),如果使用 laravel 框架加上本教程的扩展包就能访问成功。也不知到问题究竟出在哪里
如果你的项目也是安装dingo/api的组件的话,如下图:
你可以在config/api配置里面配置下中间件,如下图配置:
这样就可以解决这个问题了,具体可以看下dingo/api扩展包的相应部分的源码