Как разрешить запросы с другого сайта (CORS)
Короткий ответ
Браузер разрешит JavaScript с другого сайта прочитать ответ, только если сервер пришлёт заголовок:
<?php
header('Access-Control-Allow-Origin: https://app.example.com');
header('Content-Type: application/json');
echo json_encode(['ok' => true]);Несколько разрешённых сайтов
Сравните заголовок Origin со своим списком:
<?php
$allowed = ['https://app.example.com', 'https://admin.example.com'];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (in_array($origin, $allowed, true)) {
header('Access-Control-Allow-Origin: ' . $origin);
header('Vary: Origin');
}Предварительный запрос
Перед запросами с JSON и заголовком Authorization браузер отправляет запрос OPTIONS. На него отвечают заголовками без тела:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
http_response_code(204);
exit;
}Функции из этого ответа
- header — Отправляет заголовок HTTP-ответа.
- http_response_code — Задаёт или возвращает код состояния ответа.
- in_array — Проверяет, есть ли значение в массиве.