Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как разрешить запросы с другого сайта (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 — Проверяет, есть ли значение в массиве.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.