CORS
์๋ค.์ถ์ฒ(Origin)
์์ ๋ก๋๋ ๋ฆฌ์์ค(Resource)
์์ ๋ค๋ฅธ ์ถ์ฒ(Origin)
์ ๋ฆฌ์์ค(Resource)
๋ฅผ ์ ํํ๋ ์ ์ฑ
์น ๋ธ๋ผ์ฐ์
์์ ์ ์ฉ ๋๋ JavaScript ๋ณด์ ์ ์ฑ
์ด๋ค.์ถ์ฒ๋ URL์ Protocol
, HostName
, Port
๋ฅผ ํฉ์น ๊ฒ์ ๋งํ๋ค.
์ด ์ธ๊ฐ์ง ์ค์ ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ถ์ฒ๋ฅผ ํ์ธํ๋ค.
์ถ์ฒ์ ๋ํ ํ๋จ์ String Value๋ก ํ๋ค.
์ถ์ฒ(Origin)
์์ ๋ฆฌ์์ค(Resource)
๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ํ๋ ์ ์ฑ
์น ๋ธ๋ผ์ฐ์
์์ ์์ฒญ์ ๋ณด๋ผ ๋, Origin
์ด๋ผ๋ ํค๋์ ํ์ฌ ๋ฆฌ์์ค์ ์ถ์ฒ ์ ๋ณด๋ฅผ ๋ด์์ ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค.์๋ฒ
์์ ์ด๋ค ์ถ์ฒ์์์ ์์ฒญ๋ง ํ์ฉํ์ฌ ํด๋น ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.Access-Control-Allow-Origin
๋ฑ์ ํค๋์ ์ ๋ณด๋ฅผ ํ์
ํ์ฌ, ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋ ์ถ์ฒ์ธ์ง ํ์
ํ๋ค.์๋น ์์ฒญ
์ ๋ณด๋ด Simple Request์ ๋ง์ฐฌ๊ฐ์ง๋ก Access-Control-Allow-Origin
๋ฑ์ ํ์ธํ์ฌ, ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋ ์ถ์ฒ์ธ์ง ํ์
ํ๋ค.OPTIONS
๋ฉ์๋์ ์์ฒญ์ ๋ณด๋ด์ ํ์ฉ๋๋ ์ถ์ฒ์ธ์ง ํ์ธํ๋ค.(์ถ์ฒ: https://livebook.manning.com/concept/cors/preflight-cache)
์ธ์ฆ ์ ๋ณด
๋ฅผ ํฌํจํ๋ ์์ฒญ์ ๋ณด๋ด๋ ์๋๋ฆฌ์ค์ด๋ค.*(์์ผ๋ ์นด๋)
๋ ์ฌ์ฉํ ์ ์๋ค.Access-Control-Allow-Credentials
ํค๋๋ true
๋ก ๊ฐ์ผํ๋ค.@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(final CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.maxAge(3000);
}
}
@RequestMapping
์ด๋
ธํ
์ด์
์ด ๋ถ์ ํธ๋ค๋ฌ์ ์ด๋
ธํ
์ด์
์ผ๋ก ์ค์ @RestController
public class MyController {
@CrossOrigin(origins = "https://a.aa")
@PostMapping("/orders")
public ResponseEntity<Void> orders() {
return ResponseEntity.build();
}
}
์ถ์ฒ(Origin)
์์ ๋ก๋๋ ๋ฆฌ์์ค(Resource)
์์ ๋ค๋ฅธ ์ถ์ฒ(Origin)
์ ๋ฆฌ์์ค(Resource)
๋ฅผ ์ ํํ๋ ์ ์ฑ
์ถ์ฒ(Origin)
์์ ๋ฆฌ์์ค(Resource)
๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ํ๋ ์ ์ฑ