以下代码(使用PouchDB认证插件)失败,因为它触发浏览器发送CORS预检请求,而CouchDB不支持
我已经通过
OPTIONS
HTTP方法。var db = new PouchDB("http://localhost:5984/mydb");
db.login('username', 'password');
// assume the database URL and login info are valid
这里是错误信息(在Chrome中)。请注意,这个问题也会在Edge中出现,但在Firefox中不会:
XMLHttpRequest无法加载http://localhost:5984/_session。预检请求的响应无效,HTTP状态码为405
以下是Chrome发送的请求头(在Firefox中差异不大):
POST /_session HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 25
Accept: application/json
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,es-419;q=0.6,es;q=0.4
我已经通过
add-cors-to-couchdb
Node脚本启用了CORS。 我尝试过以下事情:
- 在我的local.ini中,手动将
OPTIONS
添加为[cors]
方法之一 - 将
{ ajax: { content_type: "text/plain" } }
作为第三个参数传递给login
- 如何防止触发预检请求?查看MDN文档,似乎不必要。
- 如果上述不可能,如何设置我的CouchDB服务器以响应预检请求?