CORS๋ Cross Origin Resource Sharing์ ์ฝ์๋ก, ๊ต์ฐจ ์ถ์ฒ ๊ณต์ ๋ผ๋ ์๋ฏธ์ด๋ค.
Origin์ โ scheme, โก host, โข port ๋ก ์ด๋ฃจ์ด์ง ๋๋ฉ์ธ์ ์๋ฏธํ๋ค. (IE์ ๊ฒฝ์ฐ port๋ฅผ ๋น๊ตํ์ง ์์)
https://www.naver.com/
โ scheme : https
โก host: www.naver.com
โข port: null (๊ณต๊ฐ๋์ง ์์)
ํ์ฌ โ ์์ ์ด ์ํ ์ถ์ฒ(Origin)๋ฅผ ๊ธฐ์ค์ผ๋ก โก ๋ค๋ฅธ ์ถ์ฒ(Origin)์ API๋ฅผ ์์ฒญํ๊ฒ ๋๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์ด ์์ฒญ์ผ๋ก ๋์ด์ค๋ ๊ฒฝ๊ณผ๊ฐ ์์ ํ์ง ํ๋จํ๊ฒ ๋๋๋ฐ,
์๋ต์ ๋ณด๋ด๋ ์ถ์ฒ๊ฐ โ ์์ ์ด ์ํ ์ถ์ฒ๊ฐ ์๋, โก ๋ค๋ฅธ ์ถ์ฒ์ฌ๋ ์๋ก ์์๋๋ ์ถ์ฒ๋ผ๋ฉด ์์ฒญ์ ๋ํด ํ์ฉํด์ฃผ๋ ์๋ต ํค๋๋ฅผ ๋ณด๋ด, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
์ด๋ฅผ CORS(Cross Origin Resource Sharing)์ด๋ผ ํ๋ค.
์ด๊ธฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ฉํ๋ ํด๋ผ์ด์ธํธ๋ ๋ชจ๋ ์์ ๋กญ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ์๋ตํ ์ ์์๋ค.
ํ์ง๋ง ์ด๊ธฐ์ ๋ธ๋ผ์ฐ์ ๋ ๋ง์ ๋ณด์์ ๋ฌธ์ ์ ์ ์๊ณ ์์๋ค. ํด์ปค๊ฐ ๋ง๋ ํผ์ฑ ์ฌ์ดํธ์ ์ ์ํ์ ๋, ํด์ปค๊ฐ ์ํ๋ ์์ฒญ๋๋ก ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๊ฒ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๋ณด์์ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
์ด๋ฅผ CSRF ๊ณต๊ฒฉ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค
์น๋ช
์ ์ธ ๋ณด์ ๋จ์ ์ ์๊ณ ์๋ ์ด๊ธฐ์ ๋ธ๋ผ์ฐ์ ๋ ํ ๊ฐ์ง ๋์์ ์ฐพ๊ฒ ๋๋ค.
์ถ์ฒ์ ๋ํด์ ์๋ฒฝํ ๊ฐ์์ผ ๋ฐ์ดํฐ๋ฅผ ์๋ตํด์ฃผ๋ ์๊ฒฉํ ์ถ์ฒ ๋น๊ต ๋ณด์ ์ ์ฑ
์ ์ธ์ฐ๊ฒ ๋๋๋ฐ,
์ด๋ฅผ SOP๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ทธ๋ผ SOP๊ฐ ์ด๋ป๊ฒ ๋ณด์ ์ทจ์ฝ์ฑ์ ๋ณด์ํ๋ ์ง ์์๋ณด์.
IE ๋ฑ์ ๋ธ๋ผ์ฐ์ ๋ ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ๋น๊ตํ๊ธฐ๋ ํ์ง๋ง,
๋๋ค์์ ๋ธ๋ผ์ฐ์ ๋ scheme + host(Domain Name) + port๋ก ์ถ์ฒ ์ผ์น ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ๋ SOP ๋ฐฉ์์ ํตํด scheme
, host
, port
์ธ ๊ฐ์ง๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉด ๊ฐ์ ์ถ์ฒ, ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ถ์ฒ๋ก ์ธ์ํ์ฌ ์์ฒญํ ์ถ์ฒ์ ์๋ตํ ์ถ์ฒ๊ฐ ๊ฐ์ ๊ณณ์ธ์ง๋ฅผ ๋น๊ตํ์ฌ ๋ณด์์ฑ์ ๋์๋ค.
์๊ฐ์ด ํ๋ฌ ๊ฐ๋ฐ์๋ค์ ์ด๋ป๊ฒ ๋ค๋ฅธ ์น์ฌ์ดํธ์ ์ ์ฉํ API๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ๊น์ด๊ฐ๋ ์ค, JSONP
๋ฅผ ์ด์ฉํ์ฌ API ํต์ ์ ํ ์ ์๋ ํธ๋ฆญ์ ๋ฐ๊ฒฌํ๊ฒ ๋๋ค.
JSONP?
SOP ์
์ฅ์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋๋ก ๋ ์์ฒญ์ ํ์ง ์๊ณ ๋ค๋ฅธ ์ถ์ฒ๋ฅผ ํตํด ์ฐํํ๊ฒ ๋๋ ์ทจ์ฝ์ฑ์ ๊ฐ๊ฒ ๋์๋ค. ์ด ๋ณด์์ฑ ์ทจ์ฝ์ ์ ๋ณด์ํ๊ธฐ ์ํด SOP๋ ๋ค๋ฅธ ์ถ์ฒ์ฌ๋, ์ด๋ฏธ ์์๋๋ ์ถ์ฒ๋ผ๋ฉด ์๋ฒ์์ ํ์ฉํด์ฃผ๋ ์๋ต ํค๋๋ฅผ ๋ณด๋ด, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด์ฃผ๋
CORS(Cross Origin Resource Sharing)
๋ฐฉ์์ด ํ์ด๋ฌ๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ CORS ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ด์ ๋ ๋ชจ๋ ์๋ฒ๋ค์ด ๋ค CORS๋ฅผ ์ธ์งํ์ง๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ๊ฑฐ๋ถํ๋ค๊ณ ํ๋๋ผ๋, ์๋ฒ๋ ์ฒ๋ฆฌํด๋ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์
์๋ฒ๊ฐ ์์ ํ๊ฒ ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋ธ๋ผ์ฐ์ ์์ ํด๋น ์์ฒญ(CORS)์ ์ฒ๋ฆฌํ๋ค.
CORS๋ ๋ค๋ฅธ Origin์ ๋ํ ์์ฒญ์ ํ์ฉํ๋ ์ ์ฑ ์ด๋ค.
๊ฐ์ Origin์์ http ํต์ ์ ํ๋ ๊ฒฝ์ฐ ์์์ cookie๊ฐ request header์ ๋ค์ด๊ฐ์ง๋ง, ๊ต์ฐจ ์ถ์ฒ๋ก ์์ฒญํ๋ ์ํฉ์์๋ ๊ทธ๋ ์ง ์๋ค.
Origin์ด ๋ค๋ฅธ http ํต์ ์์๋ request header์ ์ฟ ํค๊ฐ ์๋์ผ๋ก ๋ค์ด๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์๊ฒ ๋๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ด๊ฐ ์ด๋ค ์์ฒญ์ ๋ณด๋ด๋ ์ง ์๋ ค์ค ํ์๊ฐ ์๋ค.
ํ๋ก ํธ > WithCredentials: true
์๋ฒ > Access-Control-Allow-Credentials: true
์ฆ CORS๋ ๋ค๋ฅธ ์ถ์ฒ์ ์์์ ๊ณต์ ํ๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๊ณ ,
์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ, ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด
๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์ ์ด๋ค.