Ответ
CORS (Cross-Origin Resource Sharing) — это механизм безопасности, встроенный в браузеры, который позволяет веб-странице запрашивать ресурсы с другого домена (origin), отличного от того, с которого она была загружена.
Проблема, которую решает CORS
По умолчанию в браузерах действует политика одинакового источника (Same-Origin Policy, SOP), которая запрещает скриптам с одного сайта получать доступ к данным на другом. Это защищает пользователей от вредоносных сайтов, которые могли бы читать данные из вашей почты или банковского аккаунта, открытых в соседних вкладках.
CORS предоставляет серверу контролируемый способ "ослабить" эту политику и разрешить доверенным сайтам получать доступ к его ресурсам.
Как это работает?
Когда фронтенд (например, с https://my-app.com) пытается отправить "сложный" запрос (например, PUT или с кастомными заголовками) к API на https://api.service.com, браузер автоматически выполняет preflight-запрос (предварительный запрос) с методом OPTIONS.
Сервер должен ответить, разрешает ли он такой запрос, отправив специальные HTTP-заголовки:
Access-Control-Allow-Origin: Указывает, каким доменам разрешен доступ (https://my-app.comили*для всех).Access-Control-Allow-Methods: Список разрешенных методов (GET,POST,DELETEи т.д.).Access-Control-Allow-Headers: Список разрешенных заголовков запроса.
Если ответ сервера разрешающий, браузер отправляет основной запрос. В противном случае — блокирует его.
Пример на Flask с использованием flask-cors (best practice):
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
# Разрешить запросы с домена 'https://my-app.com' для всех роутов, начинающихся с /api/
CORS(app, resources={r"/api/*": {"origins": "https://my-app.com"}})
@app.route('/api/data')
def get_data():
return jsonify({'message': 'This is cross-origin data!'})