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

解决 跨域问题解决

问题:使用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设置这里也不贴。 

原文地址:https://www.cnblogs.com/matengfei123/p/10008258.html