javascript – PouchDB身份验证触发CORS预检请求

以下代码(使用 PouchDB Authentication插件)失败,因为它触发浏览器发送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 cannot load 07001. Response for preflight has invalid HTTP status code 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节点脚本启用了CORS.我尝试过的事情:

>在我的local.ini中的[cors]下手动添加OPTIONS作为方法
>传递{ajax:{content_type:“text / plain”}}作为登录的第三个参数

所以,我的问题是:

>如何防止预检请求被触发?看看MDN documentation,似乎没有必要.
>如果以前不可用,我如何设置CouchDB服务器以响应预检请求?

解决方法

遇到同样的问题.似乎Chrome最近开始对发送OPTIONS预检更加积极.
部分解决方法是在CORS头中指定特定的原点而不是’*’,
所以
curl -X PUT $HOST/_config/cors/origins -d '"localhost:8080"'

或类似的.

我仍然收到预检错误,但现在PouchDB成功验证,所以我可以忽略错误.
我认为解决方法是让CouchDB响应_session网址上的OPTIONS.

编辑,更多信息在这里
https://github.com/nolanlawson/pouchdb-authentication/issues/111

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...