我开始使用CouchDB,并开始构建应用程序。我可以使用CURL编写和阅读,但我已经开始尝试搜索,使用_find,我得到一个错误,指出“Referer Header Required”。
curl -X POST http://localhost:5984/mydb/_find -d '{"selector":{"member.email":"foo@bar.com"}}
返回:
{"error":"bad_request","reason":"Referer header required."}
当我尝试在调用中添加“Referer”主机时,它只是说引用者需要匹配主机,但我不知道它的主机意味着什么。
curl -X POST http://localhost:5984/mydb/_find -d '{"selector":{"member.email":"matthew"}}' -H "Referer: localhost"
{"error":"bad_request","reason":"Referer header must match host."}
我尝试了各种组合,使用localhost,有和没有端口号,我尝试过使用X-Forwarded-Host,我找到了十几篇关于POST与PUT和版本控制的相关文章,但我走到了尽头,只是无法弄清楚我错过了什么。
NB。我在OSX笔记本电脑上运行couchdb1.7.x.
答案 0 :(得分:1)
我通过查看源代码设法修复了 Referer header required
和后续的 Referer header must match host
。虽然真正的问题是期望 _find 在那些古老的 1.X 构建操作系统包管理器中工作。最好升级到最新版本的 couchdb (3.1.1)。
您可以通过将虚拟主机添加到配置文件 /etc/couchdb/local.ini
[vhosts]
;localhost = /db/
localhost = /*
[httpd]
x_forwarded_host = Y-Forwarded-Host
并且可能还为 X-Forwarded-Host 使用自定义标头名称,在我的情况下,获取 API 调用的软件对 X-Forwarded-Host 和 Host 标头做了一些过于聪明的事情。
因此,当您调用 couchdb 时,只需包含带有 'localhost' 的新标头
curl -X POST http://localhost:5984/mydb/_find \
-H 'Referer: localhost' \
-H 'Y-Forwarded-Host: localhost' \
-d '{"selector":{"member.email":"foo@bar.com"}}
或空白以便匹配
curl -X POST http://localhost:5984/mydb/_find \
-H 'Referer' \
-H 'X-Forwarded-Host' \
-d '{"selector":{"member.email":"foo@bar.com"}}
在版本 2 或 3 以后的版本中都不需要标题,他们意识到了。
答案 1 :(得分:0)
可能为时已晚,但对于接下来要讨论此主题的人(例如我), 问题是:
http://localhost:5984/mydb/_find
当您尝试在PUT中更改POST时,您会遇到问题:
"reason":"Only reserved document ids may start with underscore."
_document是指特殊功能,因此只需更改文档名称即可:)
(应该在这两个帖子中/之后都应该起作用)