[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rest-api-chto-takoe-cors-i-kak-ego-nastroit-v-spring":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1221,"chto-takoe-cors-i-kak-ego-nastroit-v-spring",34,"rest-api","REST API","🌐","Что такое CORS и как его настроить в Spring?","CORS (Cross-Origin Resource Sharing) — механизм безопасности браузера, который контролирует, какие домены могут обращаться к ресурсам API. По умолчанию браузеры запрещают JavaScript-коду делать запросы к другому домену (Same-Origin Policy).\n\n### Как работает CORS\n\nПростые запросы (GET, HEAD, POST с простыми заголовками) — браузер отправляет запрос напрямую с заголовком `Origin`:\n```\nGET \u002Fapi\u002Fusers HTTP\u002F1.1\nOrigin: https:\u002F\u002Ffrontend.example.com\n\nОтвет:\nAccess-Control-Allow-Origin: https:\u002F\u002Ffrontend.example.com\n```\n\nПредварительные запросы (Preflight) — для «сложных» запросов (PUT, DELETE, кастомные заголовки) браузер сначала отправляет OPTIONS:\n```\nOPTIONS \u002Fapi\u002Fusers\u002F42 HTTP\u002F1.1\nOrigin: https:\u002F\u002Ffrontend.example.com\nAccess-Control-Request-Method: PUT\nAccess-Control-Request-Headers: Content-Type, Authorization\n\nОтвет:\nAccess-Control-Allow-Origin: https:\u002F\u002Ffrontend.example.com\nAccess-Control-Allow-Methods: GET, POST, PUT, DELETE\nAccess-Control-Allow-Headers: Content-Type, Authorization\nAccess-Control-Max-Age: 3600\n```\n\n### Настройка в Spring\n\n\u003Cdetails>\u003Csummary>Три способа настройки CORS\u003C\u002Fsummary>\n\n1. Аннотация на контроллере:\n```java\n@RestController\n@RequestMapping(\"\u002Fapi\u002Fusers\")\n@CrossOrigin(origins = \"https:\u002F\u002Ffrontend.example.com\")\npublic class UserController {\n\n    @CrossOrigin(origins = \"*\", maxAge = 3600)\n    @GetMapping(\"\u002F{id}\")\n    public User getUser(@PathVariable Long id) { ... }\n}\n```\n\n2. Глобальная конфигурация через WebMvcConfigurer:\n```java\n@Configuration\npublic class WebConfig implements WebMvcConfigurer {\n\n    @Override\n    public void addCorsMappings(CorsRegistry registry) {\n        registry.addMapping(\"\u002Fapi\u002F**\")\n            .allowedOrigins(\"https:\u002F\u002Ffrontend.example.com\")\n            .allowedMethods(\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\")\n            .allowedHeaders(\"*\")\n            .allowCredentials(true)\n            .maxAge(3600);\n    }\n}\n```\n\n3. Через Spring Security (если используется):\n```java\n@Bean\npublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {\n    return http\n        .cors(cors -> cors.configurationSource(corsConfigurationSource()))\n        .csrf(csrf -> csrf.disable())\n        .build();\n}\n\n@Bean\npublic CorsConfigurationSource corsConfigurationSource() {\n    CorsConfiguration config = new CorsConfiguration();\n    config.setAllowedOrigins(List.of(\"https:\u002F\u002Ffrontend.example.com\"));\n    config.setAllowedMethods(List.of(\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"));\n    config.setAllowedHeaders(List.of(\"*\"));\n    config.setAllowCredentials(true);\n\n    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();\n    source.registerCorsConfiguration(\"\u002Fapi\u002F**\", config);\n    return source;\n}\n```\n\n\u003C\u002Fdetails>\n\nЕсли используется Spring Security, настройку CORS нужно делать через `SecurityFilterChain`, так как Spring Security обрабатывает запросы раньше `WebMvcConfigurer`.\n\n> **На собеседовании:** нужно объяснить, зачем нужен CORS (Same-Origin Policy), что такое preflight-запрос и как настроить в Spring. Частая ошибка — ставить `allowedOrigins(\"*\")` в продакшне вместо конкретных доменов.","","middle",[15],"rest",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое CORS и как его настроить в Spring? — Gymterview","CORS (Cross-Origin Resource Sharing) — механизм безопасности браузера, который контролирует, какие домены могут обращаться к ресурсам API. По умолчанию браузеры","CORS (Cross-Origin Resource Sharing) — механизм безопасности браузера, который контролирует, какие домены могут обращать",[15,13],"CORS (Cross-Origin Resource Sharing) — механизм безопасности браузера, который контролирует, какие домены могут обращаться к ресурсам API. По умолчанию браузеры запрещают JavaScript-коду делать запросы к другому домену (Same-Origin Policy).",true]