-
CORS ๊ฐ์codeStates front-end/node(server) 2023. 2. 6. 17:29๋ฐ์ํ
๐ CORS ๊ฐ์
๐SOP(Same-Origin Policy)
'๊ฐ์ ์ถ์ฒ์ ๋ฆฌ์์ค๋ง ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค' ๋ผ๋ ์ ์ฑ
๐ก ์ถ์ฒ๊ฐ ๋ญ๊ฐ์?
๐ ์ถ์ฒ๋ ํ๋กํ ์ฝ, ํธ์คํธ, ํฌํธ์ ์กฐํฉ, ์ด ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด ๋์ผ ์ถ์ฒ x
์ถ์ฒ๊ฐ ๋ค๋ฅธ ์์
- http / https -> ๋ url์ ํ๋กํ ์ฝ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋์ผ ์ถ์ฒ X
- tistory.hwantech.com / velog.hwantech.com -> ๋ url์ ํธ์คํธ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋์ผ ์ถ์ฒ O
- http://hwantech.tistory.com/81 / http://hwantech.tistory.com -> http ๊ธฐ๋ณธ ํฌํธ๋ 80 ์ด๋ค ๊ทธ๋ฌ๋ฏ๋ก ๋ค์ url์ ํฌํธ๊ฐ ์ ํ ์์ง ์์ผ๋ฉด ๊ธฐ๋ณธํฌํธ 80์ด๊ธฐ ๋๋ฌธ์ ๋์ผ ์ถ์ฒ X
- https://hwantech.tistory.com:443 / https:hwantech.tistory.com -> http ๊ธฐ๋ณธ ํฌํธ๋ 443 ์ด๋ค ๊ทธ๋ฌ๋ฏ๋ก ๋ค์ utl์ ํฌํธ๊ฐ ์ ํ ์์ง ์์ผ๋ฉด ๊ธฐ๋ณธํฌํธ 443์ด๊ธฐ ๋๋ฌธ์ ๋์ผ ์ถ์ฒ O
SOP๊ฐ ์๊ฒจ๋ ์ด์
์ ์ฌ์ ์ผ๋ก ํด๋ก์ธ ์ ์๋ ๋ฌธ์๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊ณต๊ฒฉ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ฌ์ค๋ค
ํดํน๋ฑ์ ์ํ์์ ์์ ํด์ง๋ค
๐CORS (Cross-Origin Resource)
SOP ์ ์ฑ ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๋ค๋ฅธ ์ถ์ฒ ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ฌ ์ ์์๊น?
์ ๋ฌธ์ ์ํฉ์ผ๋ก ์ธํด CORS๊ฐ ํ์ํ๋ค
CORS๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์
์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ, ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด
๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌ
๐๐ป๐๐ป ๋ธ๋ผ์ฐ์ ๋ SOP์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค ๊ณต์ ๋ฅผ ๋ง์ง๋ง, CORS๋ฅผ
์ฌ์ฉํ๋ฉด ์ ๊ทผ ๊ถํ์ ์ป์ ์ ์๊ฒ ๋๋ ๊ฒ
๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ์ง๋ง SOP ๋๋ฌธ์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. CORS ์ค์ ์ ํตํด ์๋ฒ์ ์๋ต ํค๋์ ‘Access-Control-Allow-Origin’์ ์์ฑํ๋ฉด ์ ๊ทผ ๊ถํ์ ์ป์ ์ ์์ต๋๋ค.
๐ CORS ๋์ ๋ฐฉ์
๐ ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ(Preflight Reqest)
์ค์ ์์ฒญ์ด ๋ณด๋ด๊ธฐ ์ , OPTIONS ๋ฉ์๋๋ก ์ฌ์ ์์ฒญ์ ๋ณด๋ด ํด๋น ์ถ์ฒ ๋ฆฌ์์ค์ ์ ๊ทผ ๊ถํ์ด
์๋์ง๋ถํฐ ํ์ธํ๋ ๊ฒ์ ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ด๋ผ๊ณ ํ๋ค
ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ์ ํ์ํ ๊น?
- ๋ฏธ๋ฆฌ ๊ถํ์ ํ์ธํ์ฌ, ์ฒ์๋ถํฐ ํต์งธ๋ก ๋ณด๋ด๋ ๊ฒ๋ณด๋ค ๋ฆฌ์์ค ๋ฉด์์ ํจ์จ์
- ๋๋นํ์ง ์์ ์๋ฒ ๋ณดํธ
ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ ๊ณผ์
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ฌ์ ์์ฒญ์ ๋ณด๋ด ํ์ธํ๊ณ , ์๋ฒ๋ ํด๋น ์ฌ์ ์์ฒญ์ ์๋ต์ ํ๋ค.
- ์๋ฒ๊ฐ ์ฌ์ ์์ฒญ์ ํ์ฉํ๋ค๋ฉด ๋ค์ ๋ณธ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์ด 2๋ฒ์ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋๋ค.
ํ๋ฆฌ ํ๋ผ์ดํธ ์์ฒญ ํฌ๋งท
- Origin: ์์ฒญ ์ถ์ฒ
- Access-Control-Request-Method: ์ค์ ์์ฒญ ๋ฉ์๋
- Access-Control-Request-Headers: ์ค์ ์์ฒญ์ ์ถ๊ฐ ํค๋
ํ๋ฆฌ ํ๋ผ์ดํธ ์๋ต ํฌ๋งท
- Access-Control-Allow-Origin: ์๋ฒ ์ธก ํ๊ฐ ์ถ์ฒ
- Access-Control-Allow-Method: ์๋ฒ ์ธก ํ๊ฐ ํค๋
- Access-Control-Allow-Headers: ์๋ฒ ์ธก ํ๊ฐ ํค๋
- Access-Control-Max-Age: ํ๋ฆฌํ๋ผ์ดํธ ์๋ต ์บ์ ์๊ฐ
๐ ๋จ์ ์์ฒญ(Simple Reqest)
ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ์๋ตํ๊ณ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ
๋ง์กฑ ์กฐ๊ฑด
- GET, HEAD, POST ์์ฒญ ์ค ํ๋์ฌ์ผ ํฉ๋๋ค.
- ์๋์ผ๋ก ์ค์ ๋๋ ํค๋ ์ธ์, Accept, Accept-Language, Content-Language, Content-Type ํค๋์ ๊ฐ๋ง ์๋์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- Content-Type ํค๋์๋ application/x-www-form-urlencoded, multipart/form-data, text/plain ๊ฐ๋ง ํ์ฉ๋ฉ๋๋ค.
๐ ์ธ์ฆ์ ๋ณด๋ฅผ ํฌํจํ ์์ฒญ(Credential Reqest)
์์ฒญ ํค๋์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ด์ ๋ณด๋ด๋ ์์ฒญ, ํ๋ก ํธ, ์๋ฒ ์์ธก ๋ชจ๋ CORS ์ค์ ์ด ํ์
- ํ๋ก ํธ ์ธก์์๋ ์์ฒญ ํค๋์ withCredentials : true ๋ฅผ ๋ฃ์ด์ค์ผ ํฉ๋๋ค.
- ์๋ฒ ์ธก์์๋ ์๋ต ํค๋์ Access-Control-Allow-Credentials : true ๋ฅผ ๋ฃ์ด์ค์ผ ํฉ๋๋ค.
- ์๋ฒ ์ธก์์ Access-Control-Allow-Origin ์ ์ค์ ํ ๋, ๋ชจ๋ ์ถ์ฒ๋ฅผ ํ์ฉํ๋ค๋ ๋ป์ ์์ผ๋์นด๋(*)๋ก ์ค์ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ๋งํผ ์ถ์ฒ๋ฅผ ์ ํํ๊ฒ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ฐ์ํ'codeStates front-end > node(server)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Refactor Express (0) 2023.02.08 Mini-Node Server (0) 2023.02.08 REST API - ๋๋ง์ ์ธ์ด๋ก ๋ธ๋ก๊น ํด๋ณด๊ธฐ (0) 2023.01.31 ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด๋ ๊ณณ) - AJAX, SSR๊ณผ CSR (0) 2023.01.30 ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด์ง ์๋ ๊ณณ) - URL/URI, IP, port, domain, DNS (0) 2023.01.30