Sobes.tech
Назад к вопросам
Junior — Middle
65

Почему внедряют механизм 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.

Пояснение кода:

  1. Создаётся веб-приложение Flask.
  2. Подключается CORS-механизм через flask_cors.
  3. В origins указывается, какой внешний origin имеет право обращаться к API.
  4. При запросе к /api/data сервер отдаёт ответ с CORS-заголовками.
  5. Браузер видит разрешающий заголовок и позволяет JavaScript на фронтенде прочитать ответ.

Ключевые моменты:

  • CORS нужен не для сервера, а для браузера: именно он блокирует небезопасные cross-origin-запросы.
  • Это не средство защиты API само по себе, а механизм контроля доступа со стороны браузера.
  • Сервер должен явно разрешать нужные origin, методы и заголовки.
  • Для некоторых запросов браузер сначала отправляет preflight-запрос OPTIONS.
  • Нельзя использовать Access-Control-Allow-Origin: * для сценариев с credential-данными, если нужны cookies или авторизация с учётом credentials.
  • Типичная задача CORS — разрешить работу фронтенда и API, развернутых на разных доменах или портах.