SOP์ CORS๋ ์น ๊ด๋ จ ๊ธฐ์ ์ ํ์คํ ํด์ฃผ๋ IETF(Internet Engineering Task Force) ๊ตญ์ ์ธํฐ๋ท ํ์คํ ๊ธฐ๊ตฌ์์ SOP์ CORS๋ฅผ ํ์ค์ผ๋ก์จ ์ ์ํ๊ณ ์๋ค. ์ฆ, ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์๋ ์ด ํ์ค์ ๋ฒ์ ์ผ๋ก ์ง์ผ์ผ ํ ์๋ฌด๊ฐ ์๋ค๋ ์๋ฏธ์ด๋ค.
๊ฒฐ๋ก ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ SOP์ CORS์ ๋ํ ์ค๋ฅ๊ฐ ๋ฐ์ ํ ์ ์๋ค๋ ์๋ฏธ์. ๊ผญ ๋ฐฐ์์ผ ํจ.
SOP ( Same-Origin Policy )
Same Origin Policy๋ "๋์ผ ์ถ์ฒ ์ ์ฑ
" ์ด๋ผ๋ ์๋ฏธ๋ก ํด์์ด ๋จ.
๋จผ์ SOP๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ Same-Origin Policy์์ Origin์ ์ดํดํด์ผ ํ๋ค.
Origin
console.log(location.origin) ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด ํ์ฌ ์ฌ์ดํธ์ Origin(์ถ์ฒ)์ ๋ํ ์ฌ์ดํธ๊ฐ ๋์ค๊ฒ ๋๋ค.
console.log(location.origin); // ํ์ฌ ์ฌ์ดํธ์ Origin(์ถ์ฒ)๋ฅผ ์์๋ด๋ ๋ช
๋ น์ด
chrome://new-tab-page // -> ๊ฒฐ๊ณผ
์์ ๊ฒฐ๊ณผ๋ ๋ธ๋ผ์ฐ์ ์ ์ฒ์ ๋ค์ด๊ฐ์ ๋ ๋์ค๋ ๊ฒฐ๊ณผ์ด๋ค. ( ์ด์ ๋ค์ด๋ฒ๋ก ๋ค์ด๊ฐ ๋ณผ ๊ฒ์ด๋ค. )
console.log(location.origin)
https://www.naver.com
๋ค์ด๋ฒ์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด ํ์ฌ ์ฌ์ดํธ์ธ ๋ค์ด๋ฒ์ ์ถ์ฒ๋ฅผ ์ ์ ์๊ฒ ๋๋ค.
"์ ๋ฆฌํ๋ฉด, Origin(์ถ์ฒ)๋ ๋จ์ํ ๋ด๊ฐ ํ์ฌ ์ ์ํ๊ณ ์๋ ์๋ฒ์ ๋๋ฉ์ธ์ ์๋ฏธํ๋ค."
์ด์ Origin์ ์์ ๋ดค์ผ๋, SOP๋ฅผ ์์๋ณผ ์ฐจ๋ก์ด๋ค.
SOP(๋์ผ ์ถ์ฒ ์ ์ฑ
)์ ๋์ผํ ์ถ์ฒ์ ๋ํด์๋ง ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๊ณ , ๋ค๋ฅธ ์ถ์ฒ์ ๋ํด์๋ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋ ์ ์ฑ
์ด๋ฉฐ, ์ถ์ฒ๋ ํ๋กํ ์ฝ, ๋๋ฉ์ธ, ํฌํธ ์ ์ฒด๊ฐ ๋์ผํ ๊ฒฝ์ฐ์๋ง ํด๋น์ด ๋๋ค. ์ฝ๊ฒ ๋งํด, "https://test.com:8080" ์์ "https://test.com:8080/user"๋ก ์์ฒญ์ ๋ณด๋์ ๋ ํ๋กํ ์ฝ, ๋๋ฉ์ธ, ํฌํธ ์ ์ฒด๊ฐ ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ์ถ์ฒ๋ก ๋ณผ ์ ์๋ค.
CORS (Cross-Origin Resource Sharing)
SOP๋ ๋์ผํ ์ถ์ฒ ์ผ ๊ฒฝ์ฐ์๋ง ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ํ์ง๋ง, ์ด๋ฌํ ์ ์ฑ
๋๋ฌธ์ ๋ค๋ฅธ ์ถ์ฒ์ ๋ํ ๋ฆฌ์์ค ๊ณต์ ์ ๋ํด ๋ถํธํจ์ด ์กด์ฌํ์ฌ ์์ธ ์กฐํญ์ ๊ฐ์ด ๋ฃ๊ฒ ๋๋ค. ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค ์์ฒญ์ด๋ผ๋ ์ด ์กฐํญ์ ํด๋นํ ๊ฒฝ์ฐ์๋ ํ์ฉ์ ํ๊ฒ ๋๋ค. ์ด๊ฒ์ด CORS ์ ์ฑ
์ ์งํจ ๋ฆฌ์์ค ์์ฒญ์ด๋ค.
CORS๋ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค ๊ณต์ ์ ๋ํ ํ์ฉ ๋ฐ ๋นํ์ฉ์ ๋ํ ์ ์ฑ
์ ์๋ฏธํ๋ค.
๋ณด์์์ผ๋ก๋ ์ธ๋ถ ํ์ด์ง์์ ๋ค๋ฅธ ํ์ด์ง๋ก ๊ฐ์ ๋ก ์ด๋์ํค๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง๋ง, ๊ทธ ์ธ๋ถ ํ์ด์ง๊ฐ ๋ณด์ฆ์ด ๋์ด์๋ ํ์ด์ง๋ผ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค. ์ด๋ฌํ ๋ถ๋ถ๊ณผ ๋ค๋ฅธ ์ถ์ฒ๊ฐ์ ์ํธ์์ฉ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ CORS๋ ์๋ ๊ฒ์ด๋ค.
ํต์ฌ ๋ด์ฉ
SOP์ CORS๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ด๋ จ๋ ๋ณด์ ์ ์ฑ
์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ api ์์ฒญ์ ๋ณด๋ผ ๋ ํ์ฌ ์ถ์ฒ์ ์ ์ฑ
๊ณผ ์๋ง์ผ๋ฉด ๋์ผํ ์ถ์ฒ๊ฐ ์๋๋ผ๊ณ ์ค๋ฅ๊ฐ ๋๊ฒ ๋๋ค.
์ฆ, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ์ ์ ์์ด๋ ๋ชจ๋ ์์ฒญ์์ ์ถ์ฒ๋ฅผ ๋จผ์ ํ์ธํ๊ณ ์ถ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๋ฉ์ธ ํ๋กํ ์ฝ ๋ฑ ๋ค๋ฅธ ์ถ์ฒ๋ก ์์ฒญ์ ๋ง์๊ฒ์ด๊ณ , ์ด๋ ๋ค๋ฅธ ์ถ์ฒ๋ก์ ์์ฒญ์ CORS๊ฐ ๋จ๋ฉด์ CORS ์ค์ ์ ํด์ผ ๋๋ค๊ณ ๋ํ๋ด๋๊ฒ์ด๋ค. Cors๋ sop์ ๋ํด ํ์ฉ ๋ฐ ๋นํ์ฉ์ ํด์ฃผ๊ธฐ ์ํด ๋์์ ์ฃผ๋ ์ ์ฑ
์ด๋ค.
์ ๋ฆฌํ๋ฉด, ๋ด ๋ธ๋ผ์ฐ์ ๊ฐ SOP์ ์ฑ
์ ์งํค๊ธฐ ์ํด ์๋์ผ๋ก ๋์ฐ๋๊ฒ์ด๋ค. ์์ฒญ์ ์ ๊ฐ๊ณ ์ฒ๋ฆฌ๊ฐ ๋์ง๋ง ๋ธ๋ผ์ฐ์ ์์์ Response๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ด๋ค. ์๋ฒ๊ฐ CORS ์ค์ (Access-Control-Allow-Origin)์ response ํค๋์ ๋ด์์ ๋ณด๋ด์ฃผ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต ํค๋๋ฅผ ๊ฒ์ฌํ๋ ๊ณผ์ ์์ ํค๋น ํค๋๋ฅผ ๋ณด๊ณ Cors์ ์ฑ
์ด ํ์ธ์ด ๋๋ฉฐ ๋์ด๊ฐ๋ ๊ฒ์ด๋ค.
๋ฐ๋๋ก ์๊ฐํ๋ฉด cors์ค์ ์ด ๋์ด์์ง ์์ผ๋ฉด ์๋ต ๊ณผ์ ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ํค๋๋ฅผ ๊ฒ์ฌํ ๋ ์๋ฌ๊ฐ ๋๋๊ฒ์ด๋ค.
'๐ Network > ๐HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] ์น ํ์ ๋ฐฐ๊ฒฝ (0) | 2024.12.18 |
---|---|
[HTTP] HTTP๋? (1) | 2024.12.18 |
[HTTP] WebSocket (1) | 2024.12.08 |
(HTTP) Stateless, Stateful (1) | 2024.04.26 |
HTTP (2) | 2024.04.26 |