ajax跨域问题及解决
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; } }