当咱们用js请求RESTful Web Service的时候,一般会出现跨域没法访问的问题,也就是没法正常获得咱们要的值。jsonp是个解决问题的方法。可是,咱们但愿访问RESTful Web Service就像通常的ajax方法同样,不用每一个都去搞一个jsonp和callback。这就须要咱们在服务端进行一些设置,下面我用一个简单的Filter来进行说明,其余比较复杂的状况根据本身的需求进行改动。java
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; public class SimpleCORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
Note:web
- Access-Control-Allow-Origin 为容许哪些Origin发起跨域请求. 这里设置为"*"表示容许全部,一般设置为全部并不安全,最好指定一下。
- Access-Control-Allow-Methods 为容许请求的方法.
- Access-Control-Max-Age 代表在多少秒内,不须要再发送预检验请求,能够缓存该结果
- Access-Control-Allow-Headers 代表它容许跨域请求包含content-type头,这里设置的x-requested-with ,表示ajax请求
若是你们有什么更好的方法,求指点ajax