Đoạn mã sau (sử dụng plugin PouchDB Authentication) không thành công vì nó kích hoạt trình duyệt gửi yêu cầu tiền tố CORS và CouchDB không hỗ trợ phương thức HTTP OPTIONS
.Xác thực PouchDB kích hoạt yêu cầu tiền tố CORS
var db = new PouchDB("http://localhost:5984/mydb");
db.login('username', 'password');
// assume the database URL and login info are valid
Đây là lỗi (trong Chrome). Lưu ý rằng vấn đề này cũng xảy ra trong Edge, nhưng không xuất hiện trong Firefox:
XMLHttpRequest không thể tải http://localhost:5984/_session. Đáp ứng cho preflight có mã trạng thái không hợp lệ HTTP 405
Và đây là các tiêu đề mà Chrome đang gửi cho yêu cầu (họ không khác biệt đáng kể trong 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
Tôi đã bật tính năng CORS qua tập lệnh Node add-cors-to-couchdb
. Những điều tôi đã cố gắng:
- thủ thêm
OPTIONS
như một phương pháp dưới[cors]
trong local.ini tôi - Đi qua
{ ajax: { content_type: "text/plain" } }
như là đối số thứ ba đểlogin
Vì vậy, câu hỏi của tôi là:
- Làm cách nào để ngăn chặn yêu cầu preflight được kích hoạt? Nhìn vào MDN documentation, nó không có vẻ cần thiết.
- Nếu trước đó là không thể, làm thế nào tôi có thể thiết lập máy chủ CouchDB của tôi lên để đáp ứng với yêu cầu preflight?
Cảm ơn đề xuất. Thật không may, khi tôi cố gắng xác định nguồn gốc như bạn mô tả, kết quả là giống như trước (cùng một lỗi, không có xác thực). Cũng nhờ liên kết, thông tin rất hữu ích! – rvighne