CORS - xx10222/selab-todo-list GitHub Wiki
๊ฐ์ Origin(์ฃผ์)์๋ง ์์ฒญ์ ๋ณด๋ผ ์ ์๊ฒ ์ ํํ๋ ๋ณด์ ์ ์ฑ
Origin์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ์ผ๋ก ์ด๋ค์ง๋ค
- URI Schema (ex. HTTP, HTTPS)
- Hostname (ex. localhost, naver.com)
- Port (ex. 80, 8080)
์ด ์ค์ ํ๋๋ผ๋ ๊ตฌ์ฑ์ด ๋ค๋ฅด๋ฉด SOP ์ ์ฑ ์ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ajax ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค
๋ค์์ http://www.example.com/dir/page.html ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์์์ด๋ค
CORS๋ ์๋ก ๋ค๋ฅธ Origin๋ผ๋ฆฌ ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ์ ํด๋ ํ์ค์ด๋ค
๋ฐฑ์๋์ ํ๋ก ํธ์๋์ Origin์ด ๋ค๋ฅธ ๊ฒฝ์ฐ ์ฌ์ฉํด์ผ ํ๋ค
Spring์์๋ @CrossOrigin
์ด๋ผ๋ ์ด๋
ธํ
์ด์
์ ์ง์ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ CORS๋ฅผ ์ฌ์ฉํ ์ ์๋ค
- GET ์์ฒญ์ธ์ง POST ์์ฒญ์ธ์ง ํ์ ํ๋ค
- Content-Type๊ณผ Custom HTTP Header๋ฅผ ํ์ ํ๋ค
- OPTIONS ์์ฒญ์ ํตํด์ ์๋ฒ๊ฐ ์ ์ ํ
Access-Control-*
๋ฅผ ๊ฐ์ก๋์ง ํ์ธํ๋ค - ๋ง์ฝ ์ ์ ํ Access-Control์ ๊ฐ์ก๋ค๋ฉด ์ค์ XHR์ ํธ๋ฆฌ๊ฑฐํ๋ค
- ์ ์ ํ์ง ๋ชปํ Access-Control์ ๊ฐ์ก๋ค๋ฉด Error๋ฅผ ๋ฐ์์ํจ๋ค
2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค
- CORS๋ฅผ ์ ์ฉํ๊ณ ์ ํ๋ Controller ์์ @CrossOrigin("*")์ ์ฌ์ฉํ๋ ๊ฒ
- WebMvcConfigure ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์์ CORS๋ฅผ ์ ์ฉํ๋ ๊ฒ
1๋ฒ์ ๊ฒฝ์ฐ, ํน์ ์ปจํธ๋กค๋ฌ์ url์๋ง ์ ์ฉ์ด ๋๋๋ฐ ์ด๋ Controller๊ฐ ๋ง์์ง์๋ก ์ด๋ ธํ ์ด์ ์ด ๋ง์์ง๋ค๋ ๋จ์ ์ด ์๋ค
๋ฐ๋ผ์ ๋๋ 2๋ฒ ๋ฐฉ๋ฒ์ ํตํด ์ค์ ํ์๋ค
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // CORS๋ฅผ ์ ์ฉํ URL ํจํด ์ ์
.allowedOrigins("*") // ์์ ๊ณต์ ๋ฅผ ํ๋ฝํ Origin ์ง์
.allowedMethods("GET", "POST", "PATCH", "DELETE") // ํ์ฉํ HTTP ๋ฉ์๋ ์ง์
.maxAge(3000); // pre-flight request ์ง์
}
}
์ฐธ๊ณ )
https://shinsunyoung.tistory.com/86
https://dev-pengun.tistory.com/entry/Spring-Boot-CORS-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0