← Назад к вопросам

Где сервер пересылает данные из CORS?

2.0 Middle🔥 221 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

CORS: Где сервер пересылает данные

CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который контролирует доступ к ресурсам с других доменов. Важно понимать, что CORS работает на уровне браузера и сервера, а не на уровне передачи данных.

Как на самом деле работает CORS

Часто возникает путаница: «Где сервер пересылает данные из CORS?» На самом деле, сервер НЕ пересылает данные из CORS. Вот что происходит:

  1. Браузер отправляет HTTP-запрос (например, GET, POST)
  2. Сервер получает и обрабатывает запрос полностью
  3. Сервер отправляет ответ всё равно, добавив специальные заголовки CORS
  4. Браузер получает ответ и проверяет CORS-заголовки
  5. Браузер решает: разрешить ли JavaScript-коду доступ к этим данным

Ключевые CORS-заголовки сервера

Сервер отправляет эти заголовки в Response:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400
Access-Control-Allow-Credentials: true

1. Access-Control-Allow-Origin

Указывает, какие источники могут получить доступ к ресурсу:

Access-Control-Allow-Origin: *                    // Любой источник
Access-Control-Allow-Origin: https://example.com  // Конкретный источник

2. Access-Control-Allow-Methods

Перечисляет разрешённые HTTP-методы:

Access-Control-Allow-Methods: GET, POST, PUT, DELETE

3. Access-Control-Allow-Headers

Указывает, какие заголовки запроса разрешены:

Access-Control-Allow-Headers: Content-Type, Authorization, X-Custom-Header

4. Access-Control-Allow-Credentials

Разрешает ли отправку cookies и авторизационных данных:

Access-Control-Allow-Credentials: true

Preflight запрос (OPTIONS)

Для сложных запросов (с кастомными заголовками, методы PUT/DELETE) браузер сначала отправляет preflight-запрос методом OPTIONS:

// Браузер автоматически отправляет OPTIONS запрос ДО POST
fetch("https://api.example.com/users", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "John" })
});

Сервер должен ответить на OPTIONS-запрос:

// Express.js пример
app.options("/users", (req, res) => {
  res.header("Access-Control-Allow-Origin", "https://example.com");
  res.header("Access-Control-Allow-Methods", "POST, OPTIONS");
  res.header("Access-Control-Allow-Headers", "Content-Type");
  res.send();
});

Где данные "пересылаются"

Если имеется в виду, через какой путь данные идут:

  1. Браузер -> Сервер: HTTP-запрос (обычно через интернет)
  2. Сервер -> Браузер: HTTP-ответ с CORS-заголовками
  3. Браузер проверяет заголовки и решает, дать ли доступ JS-коду

Типичные CORS ошибки

Access to XMLHttpRequest at https://api.example.com/data 
from origin https://myapp.com has been blocked by CORS policy: 
No Access-Control-Allow-Origin header is present on the requested resource.

Это означает, что сервер НЕ отправил нужный CORS-заголовок, и браузер заблокировал доступ.

Решение на бэкенде (FastAPI пример)

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://example.com"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

Итог

Сервер не пересылает данные из CORS — он просто добавляет специальные заголовки в ответ. Браузер получает полный ответ и решает, разрешить ли доступ. CORS — это механизм контроля доступа на уровне браузера, а не промежуточная пересылка данных.

Где сервер пересылает данные из CORS? | PrepBro