以前一直有個錯誤的理解,若是A服務器中有個ajax請求訪問B服務器,是A服務器出於安全考慮,不讓訪問B服務器,真實狀況是該ajax請求已經發送給B服務器了,B服務器出於安全考慮,沒有給A服務器的ajax請求以返回。html
這種狀況,能夠在B服務器中添加過濾器來解決,具體代碼以下。java
public class AccessControlFilter implements Filter { private final static Logger logger = LoggerFactory .getLogger(AccessControlFilter.class); public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); String requestUri = request.getRequestURI(); logger.info("AccessControlFilter.doFilter requestUri=[" + requestUri + "]"); System.out.println("AccessControlFilter.doFilter requestUri=[" + requestUri + "]"); System.out.println("AccessControlFilter.doFilter requestUri=[" + requestUri + "] 進行跨域處理。"); response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET"); response.setHeader("Access-Control-Max-Age", "6000"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) { } public void destroy() { } }
可是這種處理方式也有弊端,B服務器的安全性大大下降。ajax