overview
ajax是一种创建交互式网页应用的网页开发技术,是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换。而ajax的跨域问题则是请求了其他项目的接口地址,当协议、子域名、主域名、端口号中任意一个不一样的时候,都算不同的域。不同域之间的相互请求,就叫跨域
基于安全的考虑,ajax只能访问本地的资源,而不能跨域访问,常出现跨域访问的几种情况:
实现:
处理ajax跨域的问题主要从ajax本身和服务器端去考虑,这里主要介绍服务器端应该怎样去解决,ajax本身的话可以考虑JSONP技术。
为了不出现跨域的问题,我们应该在服务器端往响应头里添加Access-Control-Allow-Origin
response.addHeader("Access-Control-Allow-Origin", "*");
而在实际的项目当中的话,我们应该考虑配置一个拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.whcd.app.interceptor.CCInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
然后再写一个类去继承HandlerInterceptorAdapter ,
package com.whcd.app.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class CCInterceptor extends HandlerInterceptorAdapter {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// TODO Auto-generated method stub
response.addHeader("Access-Control-Allow-Origin", "*");
return true;
}
}