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