今天有个朋友问到了laravel中ajax的跨域问题,之前看过不少,不过项目中从来没用过,基本都忘记了...
为了解决问题,找了找资料,百度上到处是,这里记录2篇,感觉还不错:
http://www.cnblogs.com/dojo-lzz/p/4265637.html
http://blog.csdn.net/leedaning/article/details/53787008
这里罗列出文章提到的几点:
1.jsonp // 只支持get
2.使用代理,不涉及服务器的话,想了想,通过请求我们本域名下的后端,再通过后端去调用其他域名,中间看怎么处理,应该也可以解决!
3.CORS // 跨源资源共享协议,这个基本是最好的!但需要服务器配置一些响应头。------- 既然要跨域获取数据,对方服务器应该已经支持这些了吧。
接下来,再说laravel中实现,找了找:
1.还有个专门的laravel包:laravel-cors // 官方写的是 5.3+
2.自己写个中间件:
laravel的中间件分2种:前置和后置,不了解的,参考文档:http://laravelacademy.org/post/2803.html
所以,我们直接在 '全局中间件' ,添加 '后置中间件' ,让所有连接都支持跨域,也可放在自定义中间件,自己设置什么时候调用。
中间件的代码,很简单:
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('Access-Control-Allow-Origin', config('app.allow'));
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
$response->header('Access-Control-Allow-Credentials', 'true');
return $response;
}