В наши дни не знать что такое CORS, сродни прогулки тёмной ночью по последнему этажу, недостроенной высотки где-нибудь за городом, в неблагополучном районе... Т.е. смерти подобно, а особенно если вы "Frontend" разработчик.
CORS это набор HTTP заголовков, которые позволяют объяснить браузеру и серверу, что они хоть и из разных доменов, но одной крови работать могут вместе, т.е. поддерживаются кросс-доменные запросы. Еще совсем недавно запрос из браузера посредством старого, доброго JavaScript, без "костылей" было невозможно сделать, но эти мрачные времена канули в лету. Пришёл на помощь CORS.
В данной статье речь пойдет именно о процессе использования и базовой настройки заголовков сервера, и отправке запросов клиента с использованием jQuery.
Сервер, который хочет предоставить поддержку кросс-доменных запросов должен клиенту сообщить об этом, отправив следующие заголовки:
Это тот минимум, который необходим для успешной работы наших кросс-доменных запросов.
Access-Control-Allow-Origin — (обязательный) собственно список, разделенный пробелами допустимых доменов (источников), которые будут делать запросы к нам на сервер. Особенности: регистрозависим, поддерживает маски, например, http://api.superservice.com/, http://*.superservice.com/. Этот заголовок будет сравниваться с заголовком Origin клиентского запроса.
Access-Control-Allow-Method — (обязательный) это список доступных HTTP методов, разделенных запятыми. Особое внимание стоит уделить тому, что "звездочка" (*) работать не будет!
Access-Control-Allow-Headers — (обязательный вместе с Access-Control-Request-Headers) список через запятую заголовков разрешенных в запросе.
Пример настройки для Apache:
# CORS заголовки (добавте это, например, в .htaccess)
< ifmodule mod_headers.c >
Header always set Access-Control-Allow-Origin: "*"
Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "X-Requested-With, content-type"
< /ifmodule >
Теперь, предположим, что сервис у нас крутится по адресу http://api.superservice.com/ , а GET запрос нам надо сделать со странички http://pure.client.net/. Это не сложно сделать, к примеру с jQuery:
jQuery.ajax({
url: 'http://api.superservice.com/credit-card-ids',
type: 'GET',
contentType: 'application/json', // тип контента, который будете получать
headers: { }, // нестандартные заголовки, укажите их в Access-Control-Allow-Headers
success: function (res) {
console.log(res);
},
error: function () { ... }
});
@Дмитрий Тайнов