CouchDB +凭证+原始通配符的CORS问题

时间:2017-03-12 00:05:23

标签: cors ionic2 couchdb jelastic

我正试图在Cloud.ch上从Cloudant转移到Jelastic。在本地测试时,我在使用pouchdb时遇到了CORS错误(离子服务)。

除了CouchDB之外,Jelastic还有其他任何配置吗?

  

XMLHttpRequest无法加载http://xxx.flow.ch/xxx。对预检请求的响应没有通过访问控制检查:'访问控制 - 允许 - 来源'响应中的标题不能是通配符' *'当请求的凭据模式为' include'时。起源' http://localhost:8100'因此不允许访问。 XMLHttpRequest发起的请求的凭证模式由withCredentials属性控制。

  1. 我在Jelastic上配置了CouchDB并激活了CORS。 enter image description here enter image description here

  2. 通过CURL进行正常访问。从Cloudant到Jelastic的复制工作也很顺利。

  3. 我尝试使用Chrome扩展程序启用" Allow-Control-Allow-Origin:*"

1 个答案:

答案 0 :(得分:3)

couchdb docs unfortunately say this

  

您无法同时设置origins = *credentials = true选项

因此,这似乎意味着如果您希望使用凭据的跨源请求与couchdb一起使用,则必须将origins值设置为允许来源的明确列表;例如:

[cors]
origins = http://localhost, https://localhost, http://couch.mydev.name:8080

顺便说一下,似乎应该将其作为couchdb引发。当设置credentials = true时,couchdb不支持允许来自所有来源的请求,这是没有充分理由的。

许多/大多数其他Web服务器系统支持在包含凭据时允许来自所有来源的请求。它们处理它的方式是只取Origin请求标头的值,基本上只是将它回显到Access-Control-Allow-Origin响应标头的值。

实现执行此操作的服务器代码是微不足道的。

但是,如果没有实际纠正这个缺陷,那么当你尝试同时设置origins = * + credentials = true时,couchdb维护者至少应该修复他们的配置处理代码。

因为事情是,那个声明“你不能在文档中的同一个”中设置origins = *credentials = true选项是不正确的。很明显,可以同时设置两者(正如您的配置屏幕捕获证明) - 只是系统不会发出任何明显的警告/错误来告诉您发送凭据的任何客户端请求如果你设置了这样的沙发,那么将会失败。