Ajax-запрос на другой домен (CORS)

По умолчанию, Ajax-запросы можно отправлять только в пределах текущего домена.

Чтобы отправлять Ajax-запрос на другой домен, на другом домене сначала надо разрешить принимать Ajax-запросы с других сайтов. Для этого сервер должен возвращать два заголовка:

  • Access-Control-Allow-Origin (адрес сайта, с которого разрешена отправка Ajax-запросов);
  • Access-Control-Allow-Methods (разрешенные типы передачи данных).
Access-Control-Allow-Origin: http://mysite.ru/
Access-Control-Allow-Methods: GET, POST

В заголовок «Access-Control-Allow-Origin» также можно указать значение «*», которое значит, что сервер может принимать Ajax-запросы с любых сайтов.

Access-Control-Allow-Origin: *

Отправка Ajax-запроса

Пример отправки GET-запроса:

var ajax = new XMLHttpRequest();

// выполнить код, когда придёт ответ с GET-запроса
ajax.onreadystatechange = function() {
    if (ajax.readyState == 4) {

        if (ajax.status == 200 || ajax.status == 304) {
            // код при успешном запросе
            ajax.response; // ответ сервера
        } else {
            // код при ошибке
        }

    }
}

// Оправка GET-запроса
ajax.open('GET', 'http://example.com/');
ajax.send();

Если на сервере установлены заголовки «Access-Control-Allow-Origin» и «Access-Control-Allow-Methods», то сервер вернёт ответ, иначе вернёт ошибку с кодом 404.

Во время отправки запроса на другой домен, браузер автоматически добавлят заголовок «Origin», который сообщает серверу, с какого сайта был сделан запрос.

Origin: http://mysite.ru/

Отправка Ajax-запросов на другие домены также называют CORS (Cross-Origin Resource Sharing).

Поддержка CORS работает во всех современных браузеров. В IE работает начиная с версии IE 10.