โจ CORS (์ ์ฑ ) ์ด๋?
2009๋ ์ ๋ฑ์ฅํ ๋ณด์ ์ ์ฑ ์ผ๋ก, Cross-Origin Resource Sharing ์ ์ฝ์์ด๋ค.
์น ์ํ๊ณ์์ ๋ค๋ฅธ ์ถ์ฒ๋ก์ ๋ฆฌ์์ ์์ฒญ์ ์ ํํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ ์ฑ ์ค ํ๋์ด๋ค (๋ค๋ฅธ ํ๋๋ SOP(Same-Origin Policy)์ด๋ค.)
์ ์ฐจ ์น์์ ๋ค๋ฅธ ์ถ์ฒ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ์ผ์ด ํํด์ง์, "๋ช ๊ฐ์ง ์์ธ ์กฐํญ์ ํด๋นํ๋ (===CORS ์ ์ฑ ์ ์งํจ) ๋ฆฌ์์ค ์์ฒญ"์ ํํด์๋ ํ์ฉํด์ฃผ์๋ ์ ์ฑ ์ด ๋ฐ๋ก CORS ์ ์ฑ ์ด๋ค.
์ฆ, ์ ํด์ง ํค๋๋ฅผ ์งํจ ์์ฒญ์ ํํด์๋ ๊ฐ์ ์ถ์ฒ๊ฐ ์๋ url ๋ผ๋ฆฌ๋ ํต์ ์ด ๊ฐ๋ฅํ๊ฒ ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
SOP๋?
์ผ์ข ์ ๋ณด์ ์ ์ฑ ์ผ๋ก, "๊ฐ์ ์ถ์ฒ์์๋ง ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋ค"๋ ๊ท์น์ ๊ฐ์ง ์ ์ฑ ์ด๋ค.
Does it fulfill the SOP policy? (y/n)
-> y : ๋ฆฌ์์ค ์์ฒญ
-> n : cors
Does it fulfill the CORS policy?
-> y: ๋ฆฌ์์ค ์์ฒญ
-> n: ๋ฆฌ์์ค ์์ฒญ ๋ถ๊ฐ
"๊ฐ์" ์ถ์ฒ๋?
url ์ scheme, host, port ๊ฐ ๋์ผํ ๊ฒฝ์ฐ๋ฅผ ์ผ์ปซ๋๋ค.
์์ 3๊ฐ์ง๊ฐ ๊ฐ๋ค๋ฉด query ๋ path ๊ฐ ๋ฌ๋ผ๋ ๋์ผํ ์ถ์ฒ๋ก ์ธ์๋๋ค.
โจ Access Control Scenarios
CORS ๊ฐ ์๋ํ๋ 3๊ฐ์ง ๋ฐฉ์์ด๋ค.
โจ Simple Requests(๊ฐ๋จํ ์์ฒญ): ๋ค์ ์กฐ๊ฑด๋ค์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ํด๋นํ๋ค.
- GET, HEAD, POST ๋ฉ์๋ ์์ฒญ
- ์๋์ ์ผ๋ก ์ค์ ๋๋ ํค๋์ Accept, Accept-Language, Content-Language, Content-Type ๋ง ์กด์ฌํ๋ ์์ฒญ
- Content-Type ๊ฐ application/x-www-form-urlencoded, multipart/form-data, text/plain ์ค ํ๋์ ์ํ๋ ์์ฒญ
- ๊ฐ๋จํ ์์ฒญ์ ๊ฒฝ์ฐ, ์๋ฒ์์ Access-Control-Allow-Origin:
ํค๋๋ฅผ ์ถ๊ฐํ ์๋ต์ ๋ณด๋ธ๋ค.
โจ Preflight Requests(์ฌ์ ์์ฒญ)
๋ณธ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ OPTIONS ํค๋๋ฅผ ๋จ ์์ฒญ์ ๋จผ์ ๋ณด๋ด, ์์ ์ฑ์ ํ์ธํ๋ ํํ์ ์์ฒญ์ด๋ค.
์ด ๊ฒฝ์ฐ, ์ค์ POST ์์ฒญ์ด ์๋ OPTIONS ์์ฒญ์ Access-Control-Request-* ํค๋๊ฐ ํฌํจ๋๋ฉฐ, ์ด๋ ์๋ฒ์๊ฒ ์ค์ ์์ฒญ์ด ์ ๋ฌ๋ ๋ ์ํํ ๋ฉ์๋์ ๊ธฐํ ๋ด์ฉ์ ๋ช ์ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
OPTIONS ๋ฉ์๋๋ ์ค์ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์์ ํ ๋ฉ์๋์ด๋ค.
โจ Credential Requests(์ธ์ฆ์ ์ด์ฉํ๋ ์์ฒญ)
์์ฒญ ํค๋์ withCredentials์ ๊ฐ์ ํค๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ฟ ํค๋ฅผ ๋๋ฐํ๊ฒ ๋์ด, ์๋ฒ์ ์๋ต์ Access-Control-Allow-Credentials: true ํค๋๊ฐ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ๊ฑฐ๋ถํ๊ฒ ๋๋ค.
โจ ๋ง๋ฌด๋ฆฌ
์๋ ์ง๊ธ์ด๋ ํต์ ์ ์ฌํ์ ํจ์ฉ์ ์ฆ์ง์ํค๋ ๋งํผ ์๊ฒฉํ ๊ท์ฝ์ ์งํด์ผ๋ก์จ ์ฑ์ฌ๋๋ค. HTTP ์์ฒญ๊ณผ ์๋ต๊ณผ ๊ด๋ จํ ๋ด์ฉ์ ๊ท์ฐฎ๊ฑฐ๋ ๋ฒ๊ฑฐ๋กญ๊ฒ ๋๋ ๊ฒ์ด ์๋๋ผ ๋์ฑ ํจ์จ์ ์ธ ์ํต์ ์ํ ๊ณผ์ ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ๋์ฑ ์ ์ ํ ๊ฒ์ด๋ค.
์ฐธ๊ณ ์๋ฃ
CORS๋ ์ ์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ฅผ ํ๋ค๊ฒ ํ๋๊ฑธ๊น?
CORS(Cross-Origin Resource Sharing)์ด ๋์ค๊ฒ ๋ ๋ฐฐ๊ฒฝ ์ด์ผ๊ธฐ
'๐ป DEV > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] TCP/IP ํ๋กํ ์ฝ ์คํ (๊ทผ๋ฐ ์ด์ OSI 7๊ณ์ธต์ ๊ณ๋ค์ธ) (0) | 2021.09.09 |
---|---|
[Network] ํ๋ก์(Proxy) ๋? (0) | 2021.06.05 |
[Network] ํฌํธ(Port) ๋? (0) | 2021.06.05 |
[Network] ์ฟ ํค (Cookie) ์ ์ธ์ (Session) (0) | 2021.05.27 |
[Network] ์บ์ฑ (Caching), ์บ์ (Cache) (0) | 2021.05.13 |
๋๊ธ