Ответ
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который использует дополнительные HTTP-заголовки, чтобы разрешить веб-приложению, работающему на одном источнике (origin), получать доступ к ресурсам с другого источника.
Проблема, которую решает CORS: Браузер по умолчанию блокирует межсайтовые HTTP-запросы, инициированные скриптами (например, вызовы API с fetch или XMLHttpRequest), в соответствии с политикой Same-Origin Policy. CORS позволяет серверу явно объявить, какие внешние источники имеют право на доступ к его ресурсам.
Как это работает:
- Для простых запросов (GET, POST, HEAD с определенными заголовками) браузер добавляет заголовок
Origin, а сервер отвечает с заголовкомAccess-Control-Allow-Origin. - Для непростых запросов (например, с пользовательскими заголовками или методом PUT) браузер сначала отправляет предзапрос (preflight) методом
OPTIONS, чтобы проверить разрешения сервера.
Пример заголовков ответа сервера (C# ASP.NET Core):
// В Startup.cs или Program.cs
app.UseCors(builder =>
builder.WithOrigins("https://trusted-site.com")
.AllowAnyMethod()
.AllowAnyHeader());
Или более детальная настройка через middleware:
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Access-Control-Allow-Origin", "https://my-frontend.com");
context.Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
context.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization");
if (context.Request.Method == "OPTIONS")
{
context.Response.StatusCode = 200;
return;
}
await next();
});
Ключевые моменты:
- CORS контролируется сервером, а не клиентом.
- Это защита в браузере. Инструменты вроде Postman или curl не применяют политику CORS.
- Для работы с учетными данными (куки, заголовки авторизации) необходимо также установить
Access-Control-Allow-Credentials: trueна сервере, а на клиенте —credentials: 'include'.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶