CouchDB上带有印前检查的CORS请求 [英] CORS requests with preflight on CouchDB

查看:30
本文介绍了CouchDB上带有印前检查的CORS请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在尝试向CouchDB发送HTTP跨域请求。

为此,我们使用以下设置(灵感来自add-cors-to-couchdb tool)设置CouchDB:

[HTTPD]
enable_cors = true

[CORS]
origins = *
credentials = true
methods = GET, PUT, POST, HEAD, DELETE
headers = accept, authorization, content-type, origin, referer, x-csrf-token

并编写了类似以下内容的代码(当然不是硬编码):

<html>
  <body>
    <script>
      fetch("http://acme.org:5984/mydb/323958d9b42be0aaf811a3c96b4e5d9c", {
        method: 'DELETE',
        headers: {'If-Match': "1-0c2099c9793c2f4bf3c9fd6751e34f95"}
      }).then(x => {
        if (x.ok) return x.json().then(console.log);
        console.error(x.statusText);
      });
    </script>
   </body>
 </html>

虽然它与GETPOST一起工作得很好,但我们在DELETE上得到了405 Method not allowed。浏览器告知印前检查响应(对OPTIONS请求)不成功,而服务器指示{"error":"method_not_allowed","reason":"Only DELETE,GET,HEAD,POST,PUT,COPY allowed"}

我们同时尝试了CouchDB 2.1.1和1.6.1。我们还尝试将origins: *替换为origins: http://localhost:8080(其中8080是为上面的HTML提供服务的端口)。我们还尝试将credentials设置为false

CouchDBCORS设置

推荐答案

a comment by @Ingo Radatz到一个相关问题,我终于了解到请求中使用的每个标头都必须包含在CouchDB CORS设置中。

在我个人的情况下,我必须在接受的标头中包含if-match

[HTTPD]
enable_cors = true

[CORS]
origins = *
methods = GET, PUT, POST, HEAD, DELETE
headers = accept, authorization, content-type, origin, referer, if-match

这篇关于CouchDB上带有印前检查的CORS请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆