跨域资源共享(Cross-OriginResource Sharing)实现Ajax跨域请求

2012年9月11日

背景

随着 Web2.0 和 社交网络 的兴起,Web应用对跨域访问的需求也越来越多,但是在脚本中进行跨域请求是受安全性限制的。比如分布式应用,主网站和二级域名网站的通信等等。

许多人还没意识到当前几乎所有的浏览器(Internet Explorer 8+,Firefox 3.5+, Safari 4+和 Chrome)都可通过名为跨域资源共享(Cross-Origin ResourceSharing)的协议支持ajax跨域调用。 对一个简单的请求,没有自定义头部,要么使用GET,要么使用POST,它的主体是text/plain,请求用一个名叫Orgin的额外的头部发送。Origin头部包含请求页面的头部(协议,域名,端口),这样服务器可以很容易的决定它是否应该提供响应。

跨域资源共享(CORS)

wiki

CORS的W3C说明书

如果你正在寻找有关如何在各种常见的web服务器上建立CORS的特定信息,那就查看启用CORS分享网站。网站解释了如何在各种web服务器上从Apache到IIS再到 ExpressJS和其他来建立Access-Control-Allow-Origin response头文件。但它没有详细介绍如何建立其他的response头文件或怎样处理预检请求。

最后,推荐阅读Monsur Hossain的非常好的利用CORS教程,在HTML5 Rocks网站上可以找到。虽然主要着眼于客户端通信,但Monsur浏览了各种各样的response头文件类型以及如何处理像PUT或DELETE这样复杂的请求。这个教程并不特定于所有的web服务器,但是当结合enable-cors.org的说明,它应该就能启动和运行了。

参考

跨域资源共享,该规范地址

http://www.w3.org/TR/access-control/
http://dev.w3.org/2006/waf/access-control/