浏览器跨域会发生两个请求 一个OPTIONS预请求 如果设置的只有post路由 路由里面找不到OPTIONS路由就会直接返回404 或者回退到Route::fallback() 不会调用跨域中间件 造成跨域失败
经实验:设置any路由能正常跨域 我路由都是根据不同的method实现不同的功能 没办法都用any路由 这个怎么处理???
https://www.workerman.net/doc/webman/middleware.html#%E7%A4%BA%E4%BE%8B%EF%BC%9A%E8%B7%A8%E5%9F%9F%E8%AF%B7%E6%B1%82%E4%B8%AD%E9%97%B4%E4%BB%B6
文档写了 跨域可能会产生OPTIONS请求,我们不想OPTIONS请求进入到控制器,所以我们为OPTIONS请求直接返回了一个空的响应(response(''))实现请求拦截。 如果你的接口需要设置路由,请使用Route::any(..) 或者 Route::add(['POST', 'OPTIONS'], ..)设置。
已解决 加一行就行了 Route::options('[{path: .+}]', fn() => response('', 204));
是不是配置了fallback fallback不走中间件 你可以在fallback里面配置跨域返回
Route::fallback(function (Request $request) { $response = strtoupper($request->method()) === 'OPTIONS' ? response('', 204) : response('', 404); $response->withHeaders([ 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Allow-Origin' => "*", 'Access-Control-Allow-Methods' => '*', 'Access-Control-Allow-Headers' => '*', ]); return $response; });
非常感谢,帮了大忙了
这个真的可以
https://www.workerman.net/doc/webman/middleware.html#%E7%A4%BA%E4%BE%8B%EF%BC%9A%E8%B7%A8%E5%9F%9F%E8%AF%B7%E6%B1%82%E4%B8%AD%E9%97%B4%E4%BB%B6
文档写了
跨域可能会产生OPTIONS请求,我们不想OPTIONS请求进入到控制器,所以我们为OPTIONS请求直接返回了一个空的响应(response(''))实现请求拦截。
如果你的接口需要设置路由,请使用Route::any(..) 或者 Route::add(['POST', 'OPTIONS'], ..)设置。
已解决 加一行就行了 Route::options('[{path: .+}]', fn() => response('', 204));
是不是配置了fallback
fallback不走中间件
你可以在fallback里面配置跨域返回
非常感谢,帮了大忙了
这个真的可以