Что такое CORS и какие HTTP-заголовки он использует

Ответ

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

По умолчанию браузеры применяют Политику одинакового источника (Same-Origin Policy), которая запрещает такие междоменные запросы. CORS предоставляет серверам способ "сообщить" браузеру, что запросы с определенных доменов безопасны и разрешены.

Ключевые HTTP-заголовки CORS (отправляемые сервером):

  • Access-Control-Allow-Origin: Указывает, каким доменам разрешен доступ. Значение может быть конкретным доменом (https://example.com) или * (любой домен, но это небезопасно для API, требующих аутентификации).
  • Access-Control-Allow-Methods: Перечисляет разрешенные HTTP-методы (GET, POST, PUT, DELETE и т.д.).
  • Access-Control-Allow-Headers: Перечисляет заголовки, которые разрешено использовать в запросе.
  • Access-Control-Max-Age: Указывает, как долго результаты предварительного запроса (preflight request) могут быть кэшированы.

Пример настройки в FastAPI (Python):

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# Список разрешенных доменов
origins = [
    "http://localhost:3000",
    "https://my-frontend-app.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins, # Разрешить запросы с этих доменов
    allow_credentials=True,
    allow_methods=["GET", "POST"], # Разрешить только GET и POST
    allow_headers=["Authorization"], # Разрешить заголовок Authorization
)

@app.get("/")
def read_root():
    return {"Hello": "World"}