URL 구조

출처 : https://evan-moon.github.io/2020/05/21/about-cors/
http://www.example.com/dir/page.html 에 요청을 보낼 때 예시

동작과정
origin 필드에 출처를 담음access-control-allow-origin 에 접근을 허용할 출처 포함origin 과 비교preflight request (예비요청)

OPTIONS 메소드 사용simple request
GET, HEAD, POST 만 가능Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width를 제외한 헤더를 사용 불가Content-Type는 application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용Credentialed Request
credentials옵션@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.addExposedHeader("Authorization");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
//SecurityConfig
private final CorsFilter corsFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().addFilter(corsFilter)
}
@CrossOrigin@RequestMapping("/somePath")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class SomeController { ... }
@RestController
@RequestMapping("/somePath")
public class SomeController {
@CrossOrigin(origins="*")
@RequestMapping(value = "/{something}",method = RequestMethod.DELETE)
public ResponseEntity<String> delete(@PathVariable Long no) throws Exception{ ... }
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000");
//.allowedMethod("GET", "POST");
}
}
addMapping : CORS를 적용할 URL 패턴 정의
allowedOrigins : 자원공유를 허락할 Origin 설정
allowedMethod : 허용할 HTTP method 설정
allowedHeaders : 허용할 Header
maxAge : 원하는 시간만큼 pre-flight request caching 가능
defualt 값
지영님 노션에 이어 새로운 거 또 접수하러 오셨군여!