跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。
CORS的使用非常简单方便,只需要在服务端的响应头信息中设置Access-Control-Allow-Origin,如果浏览器检测到相应的设置,就可以允许Ajax跨域访问资源。
相对于JSONP的方式来实现跨域访问,CORS有如下的优点:
- JSONP只能实现GET请求,而CORS能够支持所有类型的HTTP请求。
- CORS允许开发者使用普通的Ajax请求来获取数据,比起JSONP有更好的错误处理,也更加的方便。
目前绝大多数浏览器都已经支持CORS了。其浏览器兼容情况如下:
具体实现如下:
服务端代码,一个简单的servlet,映射路径为http://192.168.30.150:8080/Scotch/register,具体如下:
1 @Override 2 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 3 throws ServletException, IOException { 4 resp.setHeader("Access-Control-Allow-Origin", "http://localhost:8080"); 5 String name = req.getParameter("name"); 6 JSONObject errors = new JSONObject(); 7 JSONObject data = new JSONObject(); 8 if (name ==null || name.isEmpty()) { 9 errors.put("name", "Name is required.");10 }11 12 if (errors.length() != 0) {13 data.put("success", false);14 data.put("errors", errors);15 }else {16 data.put("success", true);17 data.put("message", "Success!");18 }19 20 PrintWriter out = resp.getWriter();21 out.print(data);22 out.close();23 }
客户端代码:
1 $.ajax({ 2 url: "http://192.168.30.150:8080/Scotch/register", 3 type: "POST", 4 dataType: "json", 5 data: { 6 name: "clumiere" 7 } 8 }).then(function(response){ 9 console.info(response);10 });
本地访问客户端页面,响应结果如下: