关于 webman 跨域问题处理

展白

根据官方文档 https://www.workerman.net/doc/webman/middleware.html 创建了跨域中间件,但是只有 GET 请求生效,对于 POST 等需要预请求 OPTIONS 的情况,仍然报了跨域相关问题。经过论坛中大佬帖子们的经验结合实践,需要在路由中添加针对 OPTIONS 的路由,注意顺序:

// OPTIONS 路由放在最前面
Route::options('[{path:.+}]', function (){
    return response('');
});

// 其它路由

// 关闭默认路由放在最后
Route::disableDefaultRoute();

另外,需要注意如果开了 https,但是通过 http 进行接口请求,预检请求可能会进行 307 跳转也会失败。

以上,分享出来,让需要的人少踩坑。

3523 5 1
5个评论

WatcherLuo

  • 暂无评论
xiuwang

我的理解如果你路由里写的是

Route::post(...);

意思是只接受post请求,遇到options预请求自然就无法跨域了,按照手册说的,需要跨域的路由应该用Route::any(..) 或者 Route::add(['POST', 'OPTIONS'], ..) ,就好了,这种情况用不到

Route::options('[{path:.+}]', function (){
    return response('');
});

这个配置。

反过来如果你路由里非要写死 Roue::post(),那是需要加上面这配置的

  • 展白 2022-09-29

    是的,不管哪种形式,必须路由里定义的有 options 相关请求。

小菜

  • 暂无评论
chenzx023

直接nginx 处理不就行了啊

  • 暂无评论
晚安。

+1

  • 暂无评论
年代过于久远,无法发表评论

展白

366
积分
0
获赞数
0
粉丝数
2021-08-14 加入
×
🔝