跨域时发送预检请求,tp5的restful无options方法的解决方案

时间:2023-03-08 22:27:01

解决 跨域问题解决

问题:使用vue-resource发送delete请求时报options请求404

思考:明明发送的是delete请求,为何变成了options请求?

答:跨域情况下,PUT,DELETE或者是Content Type是application/json,均为“不是那么简单的请求”。针对这种请求,浏览器会在真实请求前,额外发起一次类型为OPTIONS的请求(Preflight request),只有服务器正确响应了OPTIONS请求后,浏览器才会发起该请求。而tp5没有定义options请求的路由,所以报了404错误。

解决方案:在tp5中定义一个路由规则,限定options方式请求,

Route::rule('xxx','xxx/delete','OPTIONS');

然后在控制器方法中在返回头中定义可访问的方式:

header('Access-Control-Allow-Methods:POST, GET, PUT, DELETE, OPTIONS');

这样就可以骗过浏览器的预检了。

另:跨域的Apache和Nginx配置就不贴了。vue-resource的content-type设置这里也不贴。