使用CouchDB _find时遭遇'Referer Header Required'错误求助
解决CouchDB _find查询的"Referer Header Required"错误
这个问题我之前帮同事排查过,其实就是CouchDB的Referer验证机制在起作用,咱们一步步解决:
首先给你一个快速能用的命令,直接添加匹配主机的Referer头就能搞定当前的查询:
curl -X POST http://localhost:5984/mydb/_find \ -H "Referer: http://localhost:5984/" \ -d '{"selector":{"member.email":"foo@bar.com"}}'
为什么会出现这个错误?
CouchDB在开启某些安全配置(比如启用了require_valid_user)或者启用严格Referer验证时,会要求请求携带的Referer头必须和请求的主机(这里是localhost:5984)完全匹配——这是它防止CSRF攻击的一种机制。你之前的普通读写操作可能没触发这个验证,但_find这类查询接口会严格执行检查。
永久解决:关闭或调整Referer验证规则
如果是本地开发,不想每次都手动加Referer头,可以修改CouchDB的配置来彻底解决:
先检查当前的Referer验证状态:
curl http://localhost:5984/_config/httpd/require_valid_referer如果返回
"true",说明确实开启了验证。修改配置关闭验证:
curl -X PUT http://localhost:5984/_config/httpd/require_valid_referer \ -d '"false"'
执行完命令后重启CouchDB服务,之后再调用_find接口就不需要额外加Referer头了。
生产环境注意事项
如果是生产环境,不建议直接关闭Referer验证,而是应该:
- 确保你的应用请求携带的Referer头与CouchDB主机完全匹配(域名、端口都要一致)
- 或者配置CouchDB的CORS规则,允许合法的请求来源
内容的提问来源于stack exchange,提问作者Matthew Knight
相关产品推荐
相关产品推荐

