XMLHttpRequest的CouchDB跨域访问?

Eon*_*nil 11 couchdb cross-domain

目前,Web应用程序需要提供某种跨域HTTP标头来访问其他域上的数据:http://openfontlibrary.org/wiki/Web_Font_linking_and_Cross-Origin_Resource_Sharing

有没有办法配置CouchDB来支持无限制的跨域访问?(它可能在内部使用apache httpd)我只在内部使用db.

roz*_*zky 14

我找到解决问题的最简单方法是使用本地安装的Apache Web Server和已启用的mod_proxy模块以及配置的ProxyPass指令.

让我们从基本设置开始

index.html具有以下内容

<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

var http = XMLHttpRequest();
http.open('GET', 'http://127.0.0.1:5984/_all_dbs', true); // ! WE WILL CHANGE THIS LINE
http.onreadystatechange = function() {
    if (http.readyState == 4 && http.status == 200) {
        console.debug('it works');
    }
};
http.send(null)
</script>
<head><title>Test Access to CouchDB</title></head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果你现在尝试它,它将无法工作,因为跨域问题(在这种情况下端口不匹配8181!= 5984).

如何解决它

  • 配置Apache(apache_home/conf/httpd.conf)
    • 取消注释 LoadModule proxy_module modules/mod_proxy.so
    • 取消注释 LoadModule proxy_http_module modules/mod_proxy_http.so
    • 添加ProxyPass /couchdb http://127.0.0.1:5984(作为ServerAdmin之类的顶级属性)
    • 重启Apache
  • 修改index.html
    • 替换http.open('GET', 'http://127.0.0.1:5984/_all_dbs', true);http.open('GET', '/couchdb/_all_dbs', true);

现在尝试,你应该在javascript控制台中看到'it works'输出(我使用的是Firebug控制台)


Ben*_*man 8

您可以使用CouchDB show函数来设置Access-Control-Allow-Origin标头.


function(doc, req) {
  return {
    body : 'whatever',
    headers : {
      "Access-Control-Allow-Origin": "\"*\""
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有关show functions的更多信息,请访问:http://guide.couchdb.org/draft/show.html