CORS์ Preflight์ ๊ฐ๋ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Q1. CORS๋ ๋ฌด์์ธ๊ฐ์?
CORS(Cross-Origin Resource Sharing)๋ ๋ค๋ฅธ ์ถ์ฒ(๋๋ฉ์ธ, ํ๋กํ ์ฝ, ํฌํธ) ๊ฐ ๋ฆฌ์์ค ๊ณต์ ๋ฅผ ํ์ฉํ๋ ๋ฉ์ปค๋์ฆ์
๋๋ค. SOP ์ ์ฑ
์ผ๋ก ์ฐจ๋จ๋ ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ์๋ฒ์ CORS ํค๋ ์ค์ ์ ํตํด ํ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฏธ์ค์ ์ ๋ธ๋ผ์ฐ์ ์์ CORS ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
Q2. SOP๊ฐ ๋ฌด์์ด๋ฉฐ ์ ํ์ํ๊ฐ์?
SOP(Same-Origin Policy)๋ ๋์ผ ์ถ์ฒ(ํ๋กํ ์ฝ, ๋๋ฉ์ธ, ํฌํธ ์ผ์น)์ ๋ฆฌ์์ค๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ ํํ๋ ๋ณด์ ์ ์ฑ
์
๋๋ค. ํ ๋๋ฉ์ธ์ ๋ฆฌ์์ค ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํด XSS, CSRF ๋ฑ์ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ฐฉํฉ๋๋ค.
Q3. SOP๊ฐ ์์ผ๋ฉด ๋ฐ์ํ ์ ์๋ ์ทจ์ฝ์ ์?
์ฟ ํค์ ์ธ์
ID ํ์ทจ๋ก ์ธํ XSS, CSRF ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํด์ง๋๋ค. SOP๋ ํ ์ถ์ฒ์ ๋ฆฌ์์ค ์ ๊ทผ์ ์ฐจ๋จํด ์ด๋ฌํ ๊ณต๊ฒฉ์ ์์ฒ ์ฐจ๋จํฉ๋๋ค.
Q4. CORS ๋์ ์๋ฆฌ๋ฅผ ์ค๋ช ํ์ธ์
- ์๋ฒ๋
Access-Control-Allow-Origin
๋ฑ์ ํค๋๋ก ํ์ฉ ์ถ์ฒ, ๋ฉ์๋, ํค๋๋ฅผ ๋ช ์ํฉ๋๋ค. - ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ ์ ํค๋๋ฅผ ๊ฒ์ฆํด ์ฐจ๋จ ๋๋ ํ์ฉํฉ๋๋ค.
- ๋ณต์กํ ์์ฒญ(์: PUT, ์ฌ์ฉ์ ์ ์ ํค๋)์ Preflight ์์ฒญ์ผ๋ก ์ฌ์ ์น์ธ์ ๋ฐ์ต๋๋ค.
Q5. Preflight ์์ฒญ์ด๋?
์ค์ ์์ฒญ ์ ์๋ฒ์ CORS ์ ์ฑ
์ ํ์ธํ๋ OPTIONS ๋ฉ์๋ ์ฌ์ ์์ฒญ์
๋๋ค. ์๋ฒ๊ฐ ํ์ฉํ์ง ์๋ ๋ฉ์๋/ํค๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ณธ ์์ฒญ์ ์ฐจ๋จํด ๋ถํ์ํ ํธ๋ํฝ์ ์ค์
๋๋ค.
Q6. ๋ชจ๋ CORS ์์ฒญ์ Preflight๊ฐ ๋ฐ์ํ๋์?
์๋๋๋ค. ๋ค์ ๊ฒฝ์ฐ์ Preflight๊ฐ ์๋ต๋ฉ๋๋ค:
- ๋จ์ ์์ฒญ: GET, HEAD, POST + ํน์ ํค๋(์:
Content-Type: text/plain
)๋ง ์ฌ์ฉ ์ - ์บ์ฑ: ์ด์ Preflight ์๋ต์ด
Access-Control-Max-Age
๊ธฐ๊ฐ ๋ด์ ์บ์๋ ๊ฒฝ์ฐ
Q7. ๋จ์ ์์ฒญ์ ์กฐ๊ฑด์?
- ๋ฉ์๋: GET, HEAD, POST ์ค ํ๋
- ํค๋:
Accept
,Accept-Language
,Content-Language
,Content-Type
(๊ฐ:application/x-www-form-urlencoded
,multipart/form-data
,text/plain
) - ์ฌ์ฉ์ ์ ์ ํค๋ ๋ฏธ์ฌ์ฉ