2016-06-28 3 views
2

Я работал с CORS и столкнулся с следующей проблемой. Клиент не жалуется на нет «Access-Control-Allow-Origin» заголовок присутствует, в то время как они присутствуют и клиент делает фактический запрос POST и получает 200.Javascript CORS - нет заголовка «Access-Control-Allow-Origin»

function initializeXMLHttpRequest(url) { //the code that initialize the xhr 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', url, true); 
    xhr.withCredentials = true; 
    xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 

    //set headers 
    for (var key in headers) { 
     if (headers.hasOwnProperty(key)) { //filter out inherited properties 
      xhr.setRequestHeader(key,headers[key]); 
     } 
    } 

     return xhr; 
} 

enter image description here

В Chrome

журнал хром консоль

chrome console log

Chrome OPTIONS просить chrome options

Chrom Запрос е POST chrome post

В Firefox

Firefox Console Log firefox console log

Firefox OPTIONS запросить запрос firefox options

Firefox POST firefox post

ответ

1

Вкратце: заголовки управления доступом (например, Access-Control-Allow-Origin) необходимо представить в ответ на обоих ВАРИАНТОВ и текущая POST.

Работа потока:

  1. Client сделать OPTIONS запрос с этими заголовками доступа HTTP. (например, Origin, Access-Control-Request-Method, Access-Control-Request-Headers)

  2. Сервер отвечает на эти заголовки доступа, обеспечивая доступ. (например, Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Allow-Credentials, Access-Control-Allow-Methods, Access-Control-Allow-Headers)

  3. Клиент производит POST запрос с данными.

  4. Сервер отвечать на POST. Если заголовок Access-Control-Allow-Origin НЕ присутствует в ответе сервера. Хотя POST успешна и отображает 200 статусных кодов на вкладке сети, xhr.status будет 0 и xhr.onerror будет запущен. И браузер отобразит сообщение об ошибке.

Заголовок Литература: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

0

Значение null для Access-Control-Allow-Origin не будет, он должен быть либо изначального домена, либо *, чтобы разрешить любое происхождение.

Для получения более подробной информации, refer to MDN.

+0

Я установил, что это домен происхождения. Но localhost тоже имеет эту проблему. (localhost запрашивает ресурсы в другом домене.) –