Вызов Angular 4 Couchdb имеет ошибку CORS, но предварительная проверка не отображается в скрипаче

У меня есть приложение, написанное на Angular 4, которое вызывает CouchDB на локальном хосте, но с разными портами.

Я использую CouchDB с приложением Aurelia без каких-либо проблем.

Теперь, когда я перехожу на Angular 4 и Angular MD, я могу решить эту проблему.

Вот код, который вызывает Couchdb

private commonUpdate (содержимое: любое, URL: строка, метод: строка = 'put') {

console.log("in common")
const myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');

const options = new RequestOptions({ headers: myHeaders, withCredentials: true });

if (content && content._rev && content._rev.length >= 5) {
  url = url + '/' + content._id;
}

const status = new DbStatus();
status.ok = false;

let response: any;
try {
  if (content) {
    const contentJson: string = JSON.stringify(content);
    this.http.post(url, contentJson, options).map(res => res.json()).subscribe(data => {
      console.log(data['results']);
    })
  } 

  status.ok = this.isHttpStatusSuccess(response.status);
  if (status.doc) {
    if (Array.isArray(status.doc.docs)) {
      if (status.doc.docs.length === 0) {
        status.ok = false;
        status.reason = 'Empty Array';
        if (!status.error) status.error = status.reason;
      }
    }
  }
  status.httpStatus = response.status;
  status.response = response;
} catch (error) {
  status.ok = false;
}

Сообщение об ошибке:

VM27427:1 XMLHttpRequest не может загрузить localhost:5984/_session. Запросы между источниками поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https.

[cors] 
origins = *
credentials = true
headers = accept, authorization, content-type, origin, referer
Couch-Rev, Set-Cookie
methods = GET, PUT, POST, HEAD, DELETE

Я не понимаю, почему это работает. Опять же, скрипач не показывает запрос метода предварительной проверки OPTION.

Однако запуск метода OPTION из почтальона возвращает разрешенные методы GET и HEAD. Возможно, браузер кеширует его, но у меня открыты инструменты разработчика с включенной настройкой отключения кеширования.

Предложения


person Darryl Wagoner WA1GON    schedule 30.07.2017    source источник


Ответы (1)


VM27427:1 XMLHttpRequest не может загрузить localhost:5984/_session. Запросы между источниками поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https.

Похоже, проблема только в том, что URL-адрес, который вы даете вызову this.http.post в вашем коде, не имеет протокольной части, то есть вы даете вызову только localhost:5984/_session, а должны давать ему http://localhost:5984/_session. Вам нужно просто добавить http://.

Итак, что касается того, почему вы не видите запрос OPTIONS, я думаю, это только потому, что браузер останавливается, прежде чем пытаться выполнить OPTIONS, потому что без части протокола в URL-адресе браузер даже не может определить, является ли URL-адрес, который вы ve данный является кросс-происхождением или нет.

person sideshowbarker    schedule 30.07.2017