在利用进行软件开发过程中,很多程序猿朋友都会碰到跨域访问问题,现在我们以JSP+Nginx+Tomcat开发的模式来谈谈跨域问题的解决方法。首先我们来描述一下什么是跨域
只要协议、域名、端口有任何一个不同,都被当作是不同的域。
跨域的解决我们可以从三个方向来思考解决,每一块都可以独立的解决问题,如果配置了多处,可能会取到相反的效果(不是双保险哦)
第一方向:后端代码层面(以JAVA为例)
可以实现一个过滤器(具体怎么配置,百度去),直接上代码好了
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
// 允许的访问域,允许全部则为*,允许部分则配置详细的http地址
response.setHeader("Access-Control-Allow-Origin", "*");
// 访问授权有效期 为一周,单位为秒
response.setHeader("Access-Control-Max-Age", "604800");
// 默认只允许GET、POST请求,需要将PUT和DELETE也加入此列
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
// POST、PUT请求需求该参数
response.setHeader("Access-Control-Allow-Headers", "Content-Type,accessToken,if-modified-since");
chain.doFilter(req, res);
}
第二个方向:Nginx端 (直接上代码)
add_header Access-Control-Allow-Origin http://a.abc.com;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers X-Requested-With,if-modified-since,content-type;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
这里大家需要读懂意思: add_header Access-Control-Allow-Origin的意思是允许制定域名跨域访问当前服务器的域名,如果不限制则为*(不安全,不推荐使用)
第三个方向:js端
请百度 jQuery+jsonp ,具体文档请参http://www.cnblogs.com/2050/p/3191744.html