SOP&CORS
1. SOP(Same-Origin Policy)
๋์ผ ์ถ์ฒ ์ ์ฑ ์ผ๋ก ๊ฐ์ ์ถ์ฒ์ ๋ฆฌ์์ค๋ง ๊ณต์ ๋ฅํจ.
์ด ์ถ์ฒ๋ ํ๋กํ ์ฝ, ํธ์คํธ, ํฌํธ์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ ์ด ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด ๋์ผํ ์ถ์ฒ๋ก ๋ณด์ง ์์.
์ ์ฌ์ ์ผ๋ก ํด๋ก์ธ ์ ์๋ ๋ฌธ์๋ฅผ ๋ถ๋ฆฌํด ๊ณต๊ฒฉ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ฌ์ค
2. CORS(Cross-Origin Resource Sharing)
๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ์ด๋ฉฐ, ์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ๊ณ ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์
์ฆ, ๋ธ๋ผ์ฐ์ ๋ SOP์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค ๊ณต์ ๋ฅผ ๋ง์ง๋ง, CORS๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๊ทผ ๊ถํ์ ์ป์ ์ ์๊ฒ ๋๋ ๊ฒ
3. CORS์ ๋์ ๋ฐฉ์
(1) ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ(Preflight Request)
์ค์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ , OPTIONS ๋ฉ์๋ ์ฌ์ ์ฒญ์ ๋ณด๋ด ํด๋น ์ถ์ฒ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ์ด ์๋์ง๋ถํฐ ์ธ
์ค์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ถํ ํ์ธ์ด ๊ฐ๋ฅํด ํจ์จ์
CORS์ ๋๋น๊ฐ ๋์ง ์์ ์๋ฒ ๋ณดํธ ๊ฐ๋ฅ, CORS ์ด์ ์ ๋ง๋ค์ด์ง ์๋ฒ๋ค์ SOP ์์ฒญ๋ง ๋ค์ด์ค๋ ์ํฉ์ ๊ณ ๋ ค
ํ์ง๋ง CORS์ ๋๋น๊ฐ ๋์ง ์์ ์๋ฒ๋ผ๋ ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ๋ณด๋ด๋ฉด CORS ์๋ฌ๋ฅผ ๋์( โ CORS ๊ธฐ๋ณธ์ฌํญ)
(2) ๋จ์ ์์ฒญ(Simple Request)
ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ ์๋ต ํ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ
์กฐ๊ฑด
GET
,HEAD
,POST
์์ฒญ ์ค ํ๋์ฌ์ผ ํจ์๋์ผ๋ก ์ค์ ๋๋ ํค๋ ์ธ์,
Accept
,Accept-Language
,Content-Language
,Content-Type
ํค๋์ ๊ฐ๋ง ์๋์ผ๋ก ์ค์ ๊ฐ๋ฅContent-Type
ํค๋์๋application/x-www-form-urlencoded
,multipart/form-data
,text/plain
๊ฐ๋ง ํ์ฉ
(3) ์ธ์ฆ์ ๋ณด๋ฅผ ํฌํจํ ์์ฒญ(Credentialed Request)
์์ฒญ ํค๋์ ์ธ์ฆ์ ๋ณด๋ฅผ ๋ด์ ๋ณด๋ด๋ ์์ฒญ
์ถ์ฒ๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ ๋ณ๋์ ์ค์ ์ ํ์ง ์์ผ๋ฉด ์ฟ ํค๋ฅผ ๋ณด๋ผ ์ ์์
์ด ๊ฒฝ์ฐ, ํ๋ก ํธ/์๋ฒ ์ ์ธก ๋ชจ๋ CORS ์ค์ ์ด ํ์ํจ
ํ๋ก ํธ ์ธก์์๋ ์์ฒญ ํค๋์
withCredentials : true
๋ฅผ ๋ฃ์ด์ค์ผ ํจ์๋ฒ ์ธก์์๋ ์๋ต ํค๋์
Access-Control-Allow-Credentials : true
๋ฅผ ๋ฃ์ด์ค์ผ ํจ์๋ฒ ์ธก์์
Access-Control-Allow-Origin
์ ์ค์ ํ ๋, ๋ชจ๋ ์ถ์ฒ๋ฅผ ํ์ฉํ๋ค๋ ๋ป์ ์์ผ๋์นด๋(*)๋ก ์ค์ ํ๋ฉด ์๋ฌ ๋ฐ์. ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ๋งํผ ์ถ์ฒ๋ฅผ ์ ํํ๊ฒ ์ค์ ํด์ฃผ์ด์ผ ํจ.
4. CORS ์ค์ ๋ฐฉ๋ฒ
(1) Node.js ์๋ฒ
(2) Express ์๋ฒ
Last updated