跨域时发送预检请求,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设置这里也不贴。 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM