CORS(Cross-Origin Resource Sharing)
๐ CORS
- ๋ค๋ฅธ ์ถ์ฒ๊ฐ(์น์ฌ์ดํธ, API์ฃผ์)์ ๋ฆฌ์์ค(์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ)๋ฅผ ์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก
๋ธ๋ผ์ฐ์
์ ์๋ ค์ฃผ๋ ์ฒด์
์๋๋ฐฉ์
- ์์ฒญ์ Origin์ด๋ผ๋ header(๋ฐ๋ ์ชฝ์ IP์ฃผ์, ์ฌ์ฉํ ํ๋กํ ์ฝ...)๋ฅผ ์ถ๊ฐ (scheme(์์ฒญํ ์์์ ์ ๊ทผ๋ฐฉ๋ฒ http,ftp...), ๋๋ฉ์ธ, ํฌํธ) ํด์ API๋ก ๋ณด๋ธ๋ค.
- API์๋ฒ๋ ๋ต์ฅ header์ ์ง์ ๋ ACAO ์ ๋ณด๋ฅผ ์ค์ด์ ๋ณด๋ธ๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ origin์์ ๋ณด๋ธ ์ถ์ฒ๊ฐ์ด ์๋ฒ์ ๋ต์ฅ ํค๋์ ๋ด๊ธด ACAO์ ๋๊ฐ์ด ์์ผ๋ฉด ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํด์ค๋ค.
์ถ์ฒ(origin)์ด๋ ?
๐ CORS์ ์ข
๋ฅ
Simple Request
- ๋ธ๋ผ์ฐ์ ์์ ๋ณธ ์์ฒญ์ ๋ฐ๋ก ๋ณด๋ด๋ฉฐ ์๋ฒ์์๋ ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ ์์ด ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Preflight Request
- ๋ณธ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ์๋ฒ๊ฐ ๋ณธ ์์ฒญ์ ์๋ฝํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํ ๊ณผ์ , ์์ฒญ์ ์ํด์ ์๋ฒ ์ ๋ณด๊ฐ ๋ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์.
- HTTP ๋ฉ์๋ ์ค OPTIONS ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ ์ด์ ๋ํ ์๋ต์ผ๋ก ์๋ฒ๊ฐ ํ์ฉํ๋ ๋ฉ์๋, ํค๋, ์ถ์ฒ ๋ฑ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์์ต๋๋ค.
SOP(Same Origin Policy)
- SOP๋ ๊ฐ์ ์ถ์ฒ์ ์ํ๋ ๋ฆฌ์์ค๋ผ๋ฆฌ๋ ์์ ๋กญ๊ฒ ์ํธ์์ฉํ ์ ์๋๋ก ํ์ฉํ๊ณ , ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์๋ ์ ๊ทผํ ์ ์๋๋ก ์ ํ
- XSS(Cross-Site Scripting) ๊ณต๊ฒฉ๊ณผ CSRF(Cross-Site Request Forgery) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํ ์ญํ
ACAO(Access-Control-Allow-Origin)
- CORS(Cross-Origin Resource Sharing)์์ ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ๋ก ์๋ต์ ๋ณด๋ผ ๋ ํ์ฉ๋๋ ์ถ์ฒ(origin)๋ฅผ ์ค์ ํ๋ HTTP ํค๋
- ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด๋ ์๋ต์ ํฌํจ๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ํตํด ์์ ์ด ์์ฒญํ ๋ฆฌ์์ค๊ฐ ํ์ฉ๋ ์ถ์ฒ์์ ์จ ๊ฒ์ธ์ง ํ์ธ
๐ ์ฐธ๊ณ ์์