webman接口 get正常,post会出现跨域问题,已经按照官网手册里的跨域中间件正确配置了。
use app\middleware\AccessControl;
return [
'' => [
AccessControl::class,
],
];
我的控制器是
app/controller/AuthController
route是
Route::post('/auth/login', [AuthController::class, 'login']);
页面报错信息:
Access to XMLHttpRequest at 'http://192.168.1.3:8787/api/auth/login' from origin 'http://localhost:5173' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
前端vite配置:
server: {
proxy: {
"/api": {
target: "http://192.168.1.3:8787",
changeOrigin: true
}
}
}
login post方法
General
Request URL: http://192.168.1.3:8787/api/auth/login
Referrer Policy: strict-origin-when-cross-origin
Request Headers
Provisional headers are shown
Learn more
Accept: application/json, text/plain, */*
Content-Type: application/json
Referer: http://localhost:5173/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
login options
General
Request URL: http://192.168.1.3:8787/api/auth/login
Request Method: OPTIONS
Status Code: 200 OK
Remote Address: 192.168.1.3:8787
Referrer Policy: strict-origin-when-cross-origin
Request Headers
Connection: keep-alive
Content-Length: 34
Content-Type: application/json
Server: workerman
workerman通过搜索跨域相关问题,有遇到和我一样的情况,也没有解决方案。百度也搜索了vite跨域相关配置,确定已经按照文档正确配置了跨域。
大佬们,救命,这什么原因呢?
看下服务端是否有错误日志,可能500了。
浏览器里network里看http状态码是否是200、返回的http头是否带上了跨域header。
大佬,network里post请求没有返回任何状态码,options请求返回200状态码,我把请求的状态码重新编辑放在上面问题里了,不知道是什么原因
服务端没有错误
解决了,我的错。。。。找了老半天,没好好看文档
提示
跨域可能会产生OPTIONS请求,我们不想OPTIONS请求进入到控制器,所以我们为OPTIONS请求直接返回了一个空的响应(response(''))实现请求拦截。
如果你的接口需要设置路由,请使用Route::any(..) 或者 Route::add(['POST', 'OPTIONS'], ..)设置。
大佬,webman两个接口,一个设置session,另一个接口拿不到session的值,是什么原因额?在webman-admin接口中确是可以的
解决了,有遇到同样问题的同学,好好看文档吧。。。。。
又出现新问题了,当添加一个中间件的时候,又会出来跨域问题,崩了。换成any也不行了。
你用默认路由呢。不在配置里面配路由的话它会自己识别,这样试试呢
说明你新添加的中间件报错了,没执行到跨域中间件