CouchDB 重写规则以更新处理程序导致 405 方法不允许
Posted
技术标签:
【中文标题】CouchDB 重写规则以更新处理程序导致 405 方法不允许【英文标题】:CouchDB Rewrite Rule to Update Handler result in 405 method not allowed 【发布时间】:2016-08-17 12:10:14 【问题描述】:我有一个奇怪的问题。为了隐藏我的请求 URL 的大部分部分,我在 CouchDB 中为我的视图、列表和更新函数使用了重写规则。尽管更新功能的 URL 很短,但一切正常。如果没有短 URL,我可以毫无问题地调用更新函数,但是如果我使用短 URL,我会得到一个不允许的 405 方法。
有短网址
curl -iX POST -g 'https://[user]:[pw]@[domain]/db_short/update_fields/IndicationSet_1750' -d '"Comment":"Wwow"' -H 'Content-Type: application/json' -H 'Accept: application/json'
HTTP/1.1 405 Method Not Allowed
Server: nginx/1.9.15
Date: Wed, 17 Aug 2016 11:57:57 GMT
Content-Type: application/json
Content-Length: 75
Connection: keep-alive
Cache-Control: must-revalidate
Allow: DELETE,GET,HEAD,PUT
没有短网址
curl -iX POST -g 'https://[user]:[pw]@[domain]/futon/kunde_a/_design/update_indicationset_nuel/_update/update_fields/IndicationSet_1750' -d '"Comment":"Wwowwwww"' -H 'Content-Type: application/json'
HTTP/1.1 201 Created
Server: nginx/1.9.15
Date: Wed, 17 Aug 2016 12:03:47 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 7
Connection: keep-alive
X-Couch-Update-NewRev: 18-6d5bba9e51bf4d28b672776c4bce11d1
X-Couch-Id: IndicationSet_1750
Strict-Transport-Security: max-age=31536000
在我的配置中,我启用了所有必要设置的 cors
cors 凭据:真 标头:接受、授权、内容类型、来源、引用、x-csrf-token 方法:GET、PUT、POST、HEAD、DELETE 来源:*
httpd enable_cors: true
【问题讨论】:
【参考方案1】:“短网址”不正确。正如documentation 所说,重写 URL 的模式是:
任何 /db/_design/ddoc/_rewrite/path
在你的情况下,这个 URL 应该可以工作:
https://[user]:[pw]@[domain]/db_short/_design/update_indicationset_nuel/_rewrite/update_fields/IndicationSet_1750
【讨论】:
嘿,谢谢您的回复。答案稍微容易一些。我忘记在更新函数的重写规则中添加通配符来处理文档 ID。 好吧,我猜你也在使用虚拟主机配置 (docs.couchdb.org/en/1.6.1/config/http.html#virtual-hosts),如果你能够省略 URL 的“_design/...”部分的话。【参考方案2】:经过一番挖掘,我发现了问题。我忘记在我的更新函数的重写规则中添加一个通配符来处理查询路径末尾的文档 ID。
旧版本:
"from": "/update_fields/",
"to": "/../update_indicationset_nuel/_update/update_fields/",
"method": "*"
新版本:
"from": "/update_fields/*",
"to": "/../update_indicationset_nuel/_update/update_fields/*",
"method": "*"
【讨论】:
以上是关于CouchDB 重写规则以更新处理程序导致 405 方法不允许的主要内容,如果未能解决你的问题,请参考以下文章