Ответ
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который использует дополнительные HTTP-заголовки, чтобы разрешить веб-приложению, работающему на одном источнике (origin), получать ресурсы с другого, отличного источника.
Проблема, которую решает CORS: Политика одинакового источника (Same-Origin Policy, SOP) по умолчанию запрещает веб-странице выполнять запросы к домену, отличному от того, с которого она загружена. CORS — это стандартный способ ослабить это ограничение безопасным способом.
Как это работает:
- Простой запрос (Simple Request): Для GET/POST/HEAD с разрешенными заголовками браузер сразу отправляет запрос с заголовком
Origin. - Предварительный запрос (Preflight Request): Для "непростых" запросов (например, с кастомными заголовками или методом PUT) браузер сначала отправляет запрос
OPTIONS. - Ответ сервера: Сервер должен ответить заголовками, разрешающими доступ:
Access-Control-Allow-Origin: https://frontend-app.com(или*)Access-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: Content-Type, Authorization
Пример настройки CORS в Spring Boot:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**") // Пути, для которых применяется CORS
.allowedOrigins("https://trusted-client.com") // Разрешенный origin
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowCredentials(true) // Разрешить куки/авторизацию
.maxAge(3600); // Кэшировать результат preflight на 1 час
}
}
Важно: CORS контролируется браузером. Серверные клиенты (curl, Postman, backend-сервисы) не подвержены этим ограничениям.