让java web支持cors

共计 1390 个字符,预计需要花费 4 分钟才能阅读完成。

场景:

    客户端发出 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

正文完
 
zhaopeng
版权声明:本站原创文章,由 zhaopeng 2012-07-01发表,共计1390字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)