【问题标题】:Couchdb cors problemsCouchdb cors 问题
【发布时间】:2015-11-23 23:45:49
【问题描述】:

我正在尝试使用 jquery.couch.js 在我的 ember.js 应用程序中进行沙发操作,但我遇到了 cors 问题,我不知道什么是好的解决方案。

在我看来,在端口 5984 上运行的沙发会使其基本上无法使用?为什么对不同端口的请求会导致 cors 问题?其他人到底是怎么睡沙发上班的?我非常困惑,不知道如何继续。

我的沙发实例从curl返回这个:

{"couchdb":"Welcome","version":"1.2.0"}

我尝试运行失败的代码是这样的:

$.couch.urlPrefix = "http://127.0.0.1:5984";
$.couch.login({
    name: 'name',
    password: 'secret'
});

我已经多次将urlPrefix 部分修改为localhost 之类的内容,并删除了两个版本的http://

它抛出的错误:

XMLHttpRequest cannot load http://127.0.0.1:5984/_session. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

帮帮我!我很谦虚地承认我这么说的菜鸟,但是如果这直接内置到基本功能中,couchdb 有什么用呢?

哦,我包括 jquery.couch.js 这样的:

<script src="http://localhost:5984/_utils/script/jquery.couch.js"></script>

使用这个版本的jquery:

jQuery JavaScript Library v1.10.2

由于以前的问题而使用 jquery 迁移:

<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

编辑

我刚刚尝试将crossDomain: true, xhrFields: {withCredentials: true} 添加到我的login 呼叫中,但无济于事。完全相同的错误消息。我显然错过了一个核心概念。

【问题讨论】:

    标签: javascript jquery ember.js couchdb cors


    【解决方案1】:

    您看到的消息是指服务器,而不是客户端。正如您所报告的,对客户调用所做的更改不会改变结果。

    在 CouchDB 1.4 中,必须明确启用 CORS 支持,并且必须进行 origins 声明。也就是说,根据您使用 CouchDB 实例的方式,有两种方法可以启用它:

    • 直接更改local.ini 中的设置并重新启动您的实例,请参阅此处了解更多信息:http://wiki.apache.org/couchdb/CORS
    • 如果您有futon 可用,请转到“设置”并在那里找到设置并启用它,在这种情况下不需要重新启动。

    更新

    似乎CORS部分默认情况下并不总是存在,在这种情况下只需自己添加它。

    希望对你有帮助。

    【讨论】:

    • 我使用的是 1.4.0 版本,而蒲团只有 cors 部分中的 credentials 选项(根据文档的要求设置为 false),以及我的 local.ini根本没有 cors 部分。我改为在我的 default.ini 中更改了 origins 选项,但这没有效果。有什么想法吗?
    • 哦,我从 1.2.0 升级到 1.4.0,因为 1.2 不支持任何 cors 选项。
    • 我刚刚在文档中发现了一条线,说我应该在我的 local.ini 中添加一个 [cors] 部分,我已经完成了,并将 default.ini 中的所有内容恢复正常,但蒲团没有似乎没有接受任何这些手动更改,反之亦然,所以我认为我的沙发实例有些古怪......
    • 所以你的答案是正确的,但有一点不同。为了让它工作,我不得不滚动到蒲团配置页面的底部并选择Add a new section,它允许我添加一个字段。现在可以了!
    • @blaineh, ups 对不起,我在这部分工作的 couchdb 已经在那里了,但很高兴你能正常工作,只是将它添加到我的答案中,以供将来遇到此问题的人使用
    【解决方案2】:

    对于那些使用 Cookie 身份验证(不是密码身份验证)并在 CouchDB 服务器返回的 Ajax 请求中重用 cookie 的人,您仍然需要在对 CouchDB 的 $.ajax() 请求中执行此操作:

    xhrFields: {withCredentials: true},
    

    这意味着您必须打开从沙发服务器获取的 jquery.couch.js 文件,然后手动将该选项插入到 javascript 中。

    如果没有两者在客户端执行此操作并在服务器端设置“credentials=true”,CORS 对我不起作用。

    现在编写的原始 jquery.couch.js 不支持客户端发送带有 CORS 的 Cookie,因此您必须自己做,直到有人打开票证才能解决此问题。

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多