关于 OPTIONS 请求返回 405 响应的问题?

按照视频教程在本地 localhost 做测试

先是不加 headers 的请求,返回正常

加上 headers 后

这是网络请求,405 响应是怎么回事?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6
liyu001989

因为你实现的代码就是返回了 405 啊,你可以调试一下自己的代码,postman 使用 options。

你是为了验证 cors 到底有没有用?

5年前 评论

CORS 照理论上是不应该走到业务的,
你检查下中间件注册成功了?

5年前 评论

@liyu001989 postman 也是返回405,不过我的 php 代码不是允许 options 请求了吗,为什么响应头中会没有允许呢?
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');

我是想验证下,我刚才改了下 nginx 的配置加上下面就好了

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;
}

file
为什么直接改 PHP代码就不行呢,我的代码写错了?如果是,那正确应该怎么写呢?

@XiaohuiLam 我这只是个测试,没用框架。

5年前 评论

@Mjlove OPTIONS请求应该直接返回NO CONTENT的,

可能

  • nginx 自动弄的,假设你AJAX的 endpoint 是个静态资源的话。我以前踩过 静态资源被 POST 会报405的坑,不清楚 OPTIONS 是否一样。
  • 走到了你的 PHP 。

你可以看你的 RESPONSE 头, 有没有 x-powered-by: php *,如果有就是 PHP (你的代码)返的,否则就是NGINX返的

5年前 评论

@XiaohuiLam 我刚试了下

  • 注释掉 nginx 配置时 options 请求 405 没有 x-powered-by: php * 。
  • 加上 nginx 配置时 options 请求成功没有 x-powered-by: php *;get 请求成功有 x-powered-by: php **。

或许 nginx 自动挡下了 options 请求吧。

But

同样的 nginx 配置(注释掉跨域配置),如果使用 laravel 框架加上本教程的扩展包就能访问成功。也不知到问题究竟出在哪里

5年前 评论
gongmeng

如果你的项目也是安装dingo/api的组件的话,如下图:

file

你可以在config/api配置里面配置下中间件,如下图配置:

file

.
.
.
.
'middleware' => [
      'crouss.request' => \Fruitcake\Cors\HandleCors::class
],

这样就可以解决这个问题了,具体可以看下dingo/api扩展包的相应部分的源码

1年前 评论

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