Почему внедряют механизм CORS при разработке веб-приложений?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
CORS внедряют, чтобы безопасно разрешать запросы между разными доменами, когда браузер по умолчанию блокирует такие обращения из-за политики одного источника. Это способ явно указать, каким внешним сайтам можно обращаться к API и с какими методами/заголовками. Механизм нужен, чтобы совместить безопасность браузера и интеграции между сервисами.
Определение:
CORS (Cross-Origin Resource Sharing) — это механизм, который позволяет серверу сообщать браузеру, разрешено ли веб-странице с одного origin обращаться к ресурсам другого origin.
Origin состоит из схемы, домена и порта. Если хотя бы одна из этих частей отличается, запрос считается cross-origin.
Без CORS браузер блокирует часть таких запросов на стороне клиента. С CORS сервер отправляет специальные заголовки, например, Access-Control-Allow-Origin, и браузер решает, можно ли доступ разрешить.
Пример использования:
Фронтенд работает на https://app.example.com, а API — на https://api.example.com. Браузер считает это разными origin, поэтому запросы к API без CORS могут быть заблокированы.
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app, origins=["https://app.example.com"])
@app.get("/api/data")
def data():
return jsonify({"status": "ok"})
В этом примере сервер явно разрешает запросы только с https://app.example.com.
Пояснение кода:
- Создаётся веб-приложение Flask.
- Подключается CORS-механизм через
flask_cors. - В
originsуказывается, какой внешний origin имеет право обращаться к API. - При запросе к
/api/dataсервер отдаёт ответ с CORS-заголовками. - Браузер видит разрешающий заголовок и позволяет JavaScript на фронтенде прочитать ответ.
Ключевые моменты:
- CORS нужен не для сервера, а для браузера: именно он блокирует небезопасные cross-origin-запросы.
- Это не средство защиты API само по себе, а механизм контроля доступа со стороны браузера.
- Сервер должен явно разрешать нужные origin, методы и заголовки.
- Для некоторых запросов браузер сначала отправляет
preflight-запросOPTIONS. - Нельзя использовать
Access-Control-Allow-Origin: *для сценариев с credential-данными, если нужны cookies или авторизация с учётом credentials. - Типичная задача CORS — разрешить работу фронтенда и API, развернутых на разных доменах или портах.