> Что такое CORS (Python)
Уровень: junior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: ООО Диджитал Сектор Поддержка, GGSel, Кинофлекс, Фабрика решений
Стек: Python
> Пример ответа
Короткий ответ
CORS (Cross-Origin Resource Sharing) - это механизм браузера, который контролирует доступ веб-страниц к ресурсам на другом origin (домен, протокол или порт). Браузер отправляет предварительный запрос OPTIONS и проверяет заголовки ответа сервера. Если сервер не разрешает origin, запрос блокируется. Для backend-разработчика это значит правильно настроить заголовки Access-Control-Allow-Origin и обработать preflight-запросы.
Подробное объяснение
CORS работает на уровне браузера, а не сервера. Сервер по умолчанию обрабатывает любой запрос, но браузер блокирует чтение ответа, если origin не совпадает.
Основные заголовки:
Access-Control-Allow-Origin- указывает, какой origin разрешён (или*для всех, но без credentials)Access-Control-Allow-Methods- разрешённые HTTP-методыAccess-Control-Allow-Headers- разрешённые заголовки запросаAccess-Control-Allow-Credentials- разрешает передачу cookies (тогда*нельзя)
Preflight-запрос возникает, когда запрос не является "simple" (например, метод PUT, DELETE, или есть кастомные заголовки). Браузер отправляет OPTIONS с заголовками Access-Control-Request-Method и Access-Control-Request-Headers, ожидая подтверждения от сервера.
На практике
Для Python-бэкенда на FastAPI или Flask обычно используют middleware. В FastAPI это CORSMiddleware, где можно задать список разрешённых origins, методы и заголовки. Важно помнить: если используешь cookies (credentials), нельзя ставить allow_origins=["*"] - нужно явно перечислить origins.
Также нужно обрабатывать OPTIONS-запросы - большинство фреймворков делают это автоматически через middleware, но если пишешь голый WSGI-сервер, придётся обрабатывать вручную.
Пример кода
PYTHON# FastAPIfrom fastapi import FastAPIfrom fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()app.add_middleware(CORSMiddleware,allow_origins=["https://frontend.example.com"],allow_methods=["GET", "POST", "PUT", "DELETE"],allow_headers=["Authorization", "Content-Type"],allow_credentials=True,)
PYTHON# Flaskfrom flask import Flaskfrom flask_cors import CORSapp = Flask(__name__)CORS(app, origins=["https://frontend.example.com"], supports_credentials=True)
Как отвечать на собеседовании
Начни с определения: CORS - это политика браузера, а не сервера. Объясни, что сервер получает запрос, но браузер скрывает ответ, если заголовки не разрешают. Упомяни preflight и разницу между simple и non-simple запросами. Покажи понимание, что * не работает с credentials. Если спросят про безопасность - скажи, что CORS не защищает сервер, а защищает пользователя от CSRF-подобных атак.
Что проверяет интервьюер
Проверяется понимание того, что CORS - это браузерный механизм, а не серверная защита. Также важно знание практических деталей: preflight, заголовки, ограничение * при credentials. Для junior достаточно уверенного объяснения базовой механики и примера настройки в своём фреймворке.
Типичные ошибки
- Утверждение, что CORS - это защита сервера от атак
- Использование
allow_origins=["*"]вместе сallow_credentials=True- это невалидно - Забывают про preflight и думают, что браузер просто блокирует запрос
- Путают CORS с CSRF - это разные механизмы
- Не учитывают, что ошибка CORS появляется в консоли браузера, а сервер при этом отвечает нормально
> Похожие задачи по Python
Какой опыт работы с Kubernetes и какие задачи выполнял
Какие способы коммуникации используются между микросервисами
Как использовать EXPLAIN и ANALYZE для оптимизации SQL запросов
Почему вы решили сменить место работы
> Похожие задачи по backend
Какой опыт работы с Kubernetes и какие задачи выполнял
Какие способы коммуникации используются между микросервисами
Как использовать EXPLAIN и ANALYZE для оптимизации SQL запросов
Почему вы решили сменить место работы
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью