让java web支持cors

请注意,本文编写于 2489 天前,最后修改于 184 天前,其中某些信息可能已经过时。

场景:

    客户端发出http请求,服务端对客户端的http请求进行验证

问题:

    问题的表象是 从Chrome发出HTTP命令后,Chrome console中报 “Origin null is not allowed by Access-Control-Allow-Origin”错误。

产生原因:

    这是由于Browser的same origin policy 限制的缘故。简单来说,从HTML中发出XMLHttpRequest  请求时,Browser会做检查,如果发现Response中没有Access-Control-Allow-Origin Header或Access-Control-Allow-Origin Header Header的值与 HTML的 orgin 不同时,Browser会拒接绝该Response,Javascript就收不到该Response。 本地HTML的Origin是 null, 而Server端没有发出Access-Control-Allow-Origin Header Header给Browser,  所以会有了“Origin null is not allowed by Access-Control-Allow-Origin”错误。

    简单的说,就是由于客户端和服务端处于两个不同的域,相互之间是不允许通信的.

    不同的域包含:1.静态文件向服务器请求 2.客户端和服务端域名不同 3.客户端和服务端端口不同 等等,个人理解总结的,不是很准确.

解决办法:

    事实上有一个W3C标准,Cross Origin Resource Sharing (CORS) 专门用来解决这个问题的。目前的主流Browser也有支持。CORS 在HTTP Message 加入几个Header, Browser和 Server可以利用这些Header来判断对方是否是安全,是否可以通信。

    http://enable-cors.org/  介绍了目前常用的服务器和技术的支持CORS的办法.其中对与JAVA Web,里面没提到.整理下让Java Web支持的办法.

Java Web支持的办法:

    使用CORS Filter 解决.

    下载地址:http://software.dzhuvinov.com/cors-filter.html

    使用方法:http://software.dzhuvinov.com/cors-filter-installation.html 

    参考文章

    http://www.cnblogs.com/LevinJ/archive/2012/04/09/2439670.html

43 Things:CORS



BuzzNet:CORS



del.icio.us:CORS



Flickr:CORS



IceRocket:CORS



LiveJournal:CORS



Technorati:CORS



← 上一篇 下一篇 →
Comments

添加新评论