# Java CORS实现Ajax跨域请求 | 大染志
跨域问题在我们开发web应用的时候经常遇到，但一直没有很好的解决方案。目前可能大家认为相对比较好使的就是——JSONP技术。不过这样前台通常需要告诉后台需要返回的函数名称，而后台需要向前台前台返回的则是一个可以执行的代码段。这样在后台处理的时候就相对麻烦一些。 其实在新的W3C标准中，我们只需要在服务器后端添加一句话即可以比较好的解决跨域问题。如java servlet中： response.se

0%

# Java CORS实现Ajax跨域请求

Posted on 2012-08-23 Edited on 2014-07-22 In HTML5 , java , javascript

跨域问题在我们开发web应用的时候经常遇到，但一直没有很好的解决方案。目前可能大家认为相对比较好使的就是——JSONP技术。不过这样前台通常需要告诉后台需要返回的函数名称，而后台需要向前台前台返回的则是一个可以执行的代码段。这样在后台处理的时候就相对麻烦一些。

其实在新的W3C标准中，我们只需要在服务器后端添加一句话即可以比较好的解决跨域问题。如java servlet中：

    response.setHeader("Access-Control-Allow-Origin","http://toozhao.com");

这段代码的意思就是，允许来自toozhao.com的跨域HTTP请求，当然我们也可以使用通配符 “*”,这样任意的请求都可以访问这个地址了，而不会出现跨域的问题。

不过据其他文档中介绍，这样做是不安全的。因为这样服务器不能访问document.cookie 对象。不知道请求者的相关信息，而微软的介绍文档中说到：

> 安全警报 为了保护用户数据，跨域请求是匿名的，这意味着服务器无法轻松找出正在请求数据的用户。 因此，只应请求和响应不属于敏感信息或个人身份识别信息的跨域数据。

因此为了安全，我们只应该向我们能保证其安全的站点提供Access-Control-Allow-Origin，即（CORS）。或者对可以公开的数据采用该种方式。

我个人认为在下面的情景中，比较适合采用这种跨域处理技术：

此外，CORS还有一些其他属性可以设置：

    Access-Control-Allow-Origin: http://www.toozhao.com   //设置允许跨域的地址
    Access-Control-Allow-Methods: POST, GET   //设置跨域允许的方法
    Access-Control-Allow-Headers: NCZ      //设置跨域允许的头部信息
    Access-Control-Max-Age: 1728000   //设置跨域允许的最大时间

好了有了上面的这些参数，只要我们在java 中可以获取到HttpServletResponse 对象，即可以设置属性。被允许的前台就可以使用一般的ajax调用了。如jquery：

    $.ajax({

    url: 'http://toozhao.com/test/xxx',

    method: 'GET'，

    success: function(msg){

    console.log(msg);

    }

    });

参考文档：
http://huaidan.org/archives/2729.html
http://msdn.microsoft.com/zh-cn/library/dd573303(v=vs.85).aspx

注：已修正图片中B系统URL错误。