CORS
- Http ํค๋๋ฅผ ์ฌ์ฉํด ํ ์ถ์ฒ์์ ์ฌ์ฉ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฆฌ์์ค๊ฐ ์์ ์ ์ถ์ฒ์ ๋ค๋ฅผ ๋ ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ ํค๋์ Origin ํ๋์ ์์ฒญ ์ถ์ฒ๋ฅผ ํจ๊ป ๋ด์ ๊ต์ฐจ ์ถ์ฒ Http ์์ฒญ์ ์คํํ๋ค
- ์ถ์ฒ ๋น๊ต ๋ก์ง์ ์๋ฒ ๊ตฌํ ์คํ์ด ์๋ ๋ธ๋ผ์ฐ์ ์ ๊ตฌํ๋ ์คํ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ๋ธ๋ผ์ฐ์ ๋ ํด๋ผ์ด๋ํธ์ ์์ฒญ ํค๋์ ์๋ฒ์ ์๋ต ํค๋๋ฅผ ๋น๊ตํด ์ต์ข ์๋ต์ ๊ฒฐ์ ํ๋ค
- ๋ ๊ฐ์ ์ถ์ฒ๋ฅผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ URL์ ๊ตฌ์ฑ์์ ์ค Protocol, Host, Port ์ธ ๊ฐ์ง๊ฐ ๋์ผํ์ง๋ฅผ ํ์ธํจ์ผ๋ก ๋น๊ต
ex) http://abc.com ์์ XMLHttpRequst, ajax(๋๋ FetchAPI) ์์ฒญ์ http://bcd.com ์ ๋ฐ์ดํฐ json์ ์์ฒญํ๋ ๊ฒฝ์ฐ ํด๋น ์์ฒญ์ ์ ํ๋๋ค
CORS์ ์ข ๋ฅ
1. Simple Request
Preflight(์๋น ์์ฒญ) ์์ด ์๋ฒ์ ๋ณธ ์์ฒญ์ ํ๊ณ , ์๋ต ํค๋์ Acces-Control-Allow-Origin๊ฐ ๋ด๊ฒจ์ฌ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฅผ ๋น๊ตํ ํ CORS ์๋ฐ ์ฌ๋ถ๋ฅผ ๋น๊ตํ๋ ๋ฐฉ์
2. Preflight Request
๋ธ๋ผ์ฐ์ ์์ ๋ณธ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์๋น ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด CORS ์๋ฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ด๋ค. OPTIONS ๋ฐฉ์์ ์ฌ์ฉํ๋ค
CORS ์๋ฒ ์ค์
1) Access-Control-Allow-Origin : ํค๋์ ์์ฑ๋ ์ถ์ฒ์๋ง ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์์ค๋ฅผ ํ์ฉํ๋ค
2) Access-Control-Allow-Methods : ์๋น ์์ฒญ์ ๋ํ ์๋ต์ ์ค ์์ฒญ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ์๋๋ฅผ ๋ณด์ฌ์ค๋ค
3) Access-Control-Allow-Headers : ์๋น ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก ์ค ์์ฒญ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํค๋ ํ๋๋ฅผ ๋ณด์ฌ์ค๋ค
4) Access-Control-Allow-Credentials : ์ค์ ์์ฒญ์ ์ฟ ํค๋ ์ธ์ฆ ๋ฑ์ ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ด ํฌํจ๋ ์ ์์์ ๋ํ๋ธ๋ค
5) Access-Control-Allow-Max-Age : ์๋น ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ ์ ์๋ ์๊ฐ์ ๋ํ๋ธ๋ค
์คํ๋ง ์ํ๋ฆฌํฐ
1. CorsConfigurer
1) ํํฐ ์ฒด์ธ์ CorsFilter๋ฅผ ์ถ๊ฐํ๊ณ , ์ฌ์ฉํ๋ค
2) ๋ง์ฝ corsFilter ๋น์ด ์ ๊ณต๋๋ฉด ํด๋น ๋น์ ์ฐ์ ์ฌ์ฉํ๋ค
3) corsFilter ๋น์ด ์์ด, CorsConfigurationSource ๋น์ด ์ ์๋ ๊ฒฝ์ฐ์ ํด๋น ์ค์ ์ ์ฌ์ฉํ๋ค
4) CorsConfigurationSource๊ฐ ์๊ณ SpringMVC๊ฐ ํด๋์ค ๊ฒฝ๋ก์ ์๋ ๊ฒฝ์ฐ HandlerMappingIntrospector๊ฐ ์ฌ์ฉ๋๋ค
2. CorsFilter
- CORS ์๋น์์ฒญ์ ์ฒ๋ฆฌํ๊ณ Simple ๋๋ ๋ณธ ์์ฒญ์ ๊ฐ๋ก์ฑ๋ค. ์ ๊ณต๋ CorsConfigurationSouce๋ฅผ ํตํด ์ผ์น๋ ์ ์ฑ ์ ๋ฐ๋ฅธ ์๋ต์ ์ ๋ฐ์ดํธํ๋ ํํฐ
cf) Spring MVC Java ๊ตฌ์ฑ๊ณผ Spring MVC XML ๋ค์์คํ์ด์ค์์ CORS๋ฅผ ๊ตฌ์ฑํ๋ ๋์. ์คํ๋ง ์น์ ์์กดํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ javax.servlet์์ CORS ๊ฒ์ฌ๋ฅผ ์ํํด์ผํ๋ ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ์ ์ฉํ๋ค
-