PHP Access-Control-Allow-Origin: методы и примеры совместного использования ресурсов между источниками (CORS)

Обмен ресурсами между источниками (CORS) — это важный механизм безопасности, который позволяет веб-браузерам отправлять запросы к домену, отличному от того, из которого возникла веб-страница. При выполнении запросов между источниками браузер отправляет HTTP-запрос на сервер, который отвечает определенными заголовками, указывающими, разрешен запрос или нет. В PHP вы можете управлять заголовком Cross-Origin-Allow-Origin, используя различные методы. В этой статье мы рассмотрим несколько методов с примерами кода для включения CORS в приложениях PHP.

Метод 1: использование функции заголовка PHP

<?php
header("Access-Control-Allow-Origin: *");

Этот метод устанавливает для заголовка Access-Control-Allow-Origin значение «*» (подстановочный знак), разрешая запросы из любого домена. Это самый простой способ включить CORS, но он может подходить не для всех сценариев, поскольку допускает запросы из любого источника.

Метод 2: разрешение определенных источников

<?php
$allowedOrigins = array(
    "https://example.com",
    "https://api.example.com"
);
$origin = $_SERVER['HTTP_ORIGIN'];
if (in_array($origin, $allowedOrigins)) {
    header("Access-Control-Allow-Origin: " . $origin);
}

Этот метод проверяет, присутствует ли запрашивающий источник в списке разрешенных источников. Если совпадение найдено, заголовок Access-Control-Allow-Origin устанавливается соответствующим образом. Этот подход обеспечивает больший контроль над тем, каким доменам разрешено отправлять запросы из разных источников.

Метод 3. Обработка предварительных запросов

<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Allow-Headers: Content-Type");
    exit;
}

Предварительные запросы отправляются браузером, чтобы проверить, разрешен ли сервером запрос между источниками. Этот метод обрабатывает предварительные запросы, отвечая соответствующими заголовками. Он позволяет использовать определенные методы (POST, GET, OPTIONS) и заголовки (Content-Type) для запросов между источниками.

Метод 4: использование промежуточного программного обеспечения/оболочки PHP
Если вы используете платформу PHP или хотите более модульный подход, вы можете создать промежуточное программное обеспечение или функцию-оболочку для обработки заголовков CORS. Это позволяет вам централизовать логику CORS и применять ее к нескольким маршрутам или конечным точкам. Вот пример использования микрофреймворка Slim PHP:

<?php
use Slim\App;
$app = new App();
$app->options('/{routes:.+}', function ($request, $response, $args) {
    return $response;
});
$app->add(function ($request, $handler) {
    $response = $handler->handle($request);
    return $response
        ->withHeader('Access-Control-Allow-Origin', '*')
        ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
        ->withHeader('Access-Control-Allow-Headers', 'Content-Type');
});
// Define your routes and application logic here
$app->run();

Этот метод демонстрирует использование функции промежуточного программного обеспечения в среде Slim для обработки заголовков CORS. Он позволяет вам определять разрешенные методы и заголовки, обеспечивая гибкость и возможность повторного использования.

Включение совместного использования ресурсов между источниками (CORS) в приложениях PHP имеет решающее значение для обеспечения безопасности запросов из разных источников. В этой статье мы рассмотрели несколько методов управления заголовком Access-Control-Allow-Origin с помощью PHP. В зависимости от ваших конкретных требований вы можете выбрать подходящий метод, чтобы разрешить запросы из определенных доменов или всех доменов. Реализация правильной обработки CORS обеспечивает безопасное и надежное веб-приложение.