Skip to content

Latest commit

ย 

History

History
171 lines (86 loc) ยท 8.49 KB

CORS.md

File metadata and controls

171 lines (86 loc) ยท 8.49 KB

CORS(Cross Origin Resource Sharing)

CORS๋Š” '๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ '๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ, HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ์ถœ์ฒ˜(origin)์—์„œ ์‹คํ–‰์ค‘์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜(cross-origin)์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ •์ฑ…

Origin

SOP(Same Origin Policy)

CORS(Cross Origin Resource Sharing)

CORS ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฐฉ์•ˆ


Origin(์ถœ์ฒ˜)

URL ๊ตฌ์กฐ

IMAGES


์ถœ์ฒ˜(Origin)๋ž€ URL ๊ตฌ์กฐ์—์„œ ์‚ดํŽด๋ณธ Protocal, Host, Port๋ฅผ ํ•ฉ์นœ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ์ฝ˜์†” ์ฐฝ์— location.origin๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ถœ์ฒ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฐ™์€ ์ถœ์ฒ˜ vs ๋‹ค๋ฅธ ์ถœ์ฒ˜

ํ˜„์žฌ ์›นํŽ˜์ด์ง€์˜ ์ฃผ์†Œ๊ฐ€ https://csstudy.github.io/tech/ ์ผ ๋•Œ ๊ฐ™์€ ์ถœ์ฒ˜์ธ์ง€ ๋‹ค๋ฅธ ์ถœ์ฒ˜์ธ์ง€ ํ™•์ธํ•˜๊ธฐ

https://csstudy.github.io/about?q=work : ๊ฐ™์€ ์ถœ์ฒ˜

http://csstudy.github.io : ๋‹ค๋ฅธ ์ถœ์ฒ˜

https://csstudy.github.io:81/about/ : ๋‹ค๋ฅธ ์ถœ์ฒ˜


SOP(๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…)

SOP ์ •์ฑ…์€ '๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…'์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ, ๊ฐ™์€ ์ถœ์ฒ˜์— ๋Œ€ํ•œ HTTP ์š”์ฒญ๋งŒ์„ ํ—ˆ๋ฝํ•œ๋‹ค. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์ค‘์š”ํ•œ ๋ณด์•ˆ๋ชจ๋ธ์ด๋‹ค.

Postman์œผ๋กœ API๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋ฉ€์ฉกํžˆ ์ž˜ ๋™์ž‘ํ•˜๋‹ค๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งŒ CORS policy ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๋‹นํ˜น์Šค๋Ÿฌ์šธ ๋•Œ๊ฐ€ ์žˆ์œผ์…จ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…(Same-Origin Policy, SOP)๋ฅผ ์ง€์ผœ์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ๊ธˆ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์›นํŽ˜์ด์ง€๋Š” ์ƒ๋‹นํžˆ ์ž์ฃผ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด csstudy.github.io๋ผ๋Š” ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›นํŽ˜์ด์ง€์—์„œ csstudy-api.github.io๋ผ๋Š” API ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์„œ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค๋ฉด ์ด ์›นํŽ˜์ด์ง€๋Š” ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์„ ์œ„๋ฐ˜ํ•œ ๊ฒƒ์ด ๋œ๋‹ค.

๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์„ ์ง€ํ‚ค๋ฉด ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•ด ๋ถˆํŽธํ•˜์ง€๋งŒ, ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์€ XSS๋‚˜ XSRF ๋“ฑ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋…ธ๋ฆฐ ๊ณต๊ฒฉ์„ ๋ฐฉ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์ ์œผ๋กœ๋Š” ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒƒ์€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ SOP์˜ ์˜ˆ์™ธ ์กฐํ•ญ์ด CORS๋‹ค.


CORS

์›น ์„œ๋ฒ„์—๊ฒŒ ๋ณด์•ˆ cross-domain ๋ฐ์ดํ„ฐ ์ „์†ก์„ ํ™œ์„ฑํ™”ํ•˜๋Š” cross-domain ์ ‘๊ทผ ์ œ์–ด๊ถŒ์„ ๋ถ€์—ฌํ•œ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹

1) Simple Request

IMAGES

Simple Request๋Š” ์„œ๋ฒ„์—๊ฒŒ ๋ฐ”๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ”๋กœ ์š”์ฒญ์„ ํ•˜๋ฉด ์„œ๋ฒ„๋Š” Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด๋‚ธ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํ™•์ธํ•ด์„œ CORS ๋™์ž‘์„ ์ˆ˜ํ–‰ํ• ์ง€ ํŒ๋‹จํ•œ๋‹ค.

SImple Request ๋ฅผ ๋ณด๋‚ด๊ธฐ์œ„ํ•œ ์กฐ๊ฑด (๋ชจ๋‘ ๋งŒ์กฑํ•˜์—ฌ์•ผํ•œ๋‹ค.)

  1. ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET, HEAD, POST ์ค‘ ํ•˜๋‚˜์—ฌ์•ผํ•œ๋‹ค.

  2. Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width๋ฅผ ์ œ์™ธํ•œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

  3. Content-Type ํ—ค๋”๋Š” application/x-www-form-urlencoded, multipart/form-data, text/plain ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” application/json์€ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

IMAGES

2) Preflight Request

IMAGES

์„œ๋ฒ„์— ์˜ˆ๋น„ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ์•ˆ์ „ํ•œ์ง€ ํŒ๋‹จํ•œ ํ›„ ๋ณธ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ณธ ์š”์ฒญ์— ์•ž์„œ, OPTIONS ๋ฉ”์„œ๋“œ๋กœ ์š”์ฒญ์ด ๋ณด๋‚ด์ง€๊ณ , ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์š”์ฒญ์„ ์ „์†กํ• ์ง€ ํŒ๋‹จํ•œ๋‹ค. ์„œ๋ฒ„๋Š” OPTIONS์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด๋‚ด๊ณ , ๋ธŒ๋ผ์šฐ์ €๋Š” ์œ„ Simple Request์™€ ๋™์ผํ•˜๊ฒŒ Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํ™•์ธํ•ด์„œ CORS ๋™์ž‘์„ ์ˆ˜ํ–‰ํ• ์ง€ ํŒ๋‹จํ•œ๋‹ค.

  • POST์š”์ฒญ์ด์ง€๋งŒ Content-Type์ด application/x-www-form-urlencoded, multipart/form-data, text/plain์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋„ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค.

IMAGES

3) Credentialed Request

์ธ์ฆ๋œ ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” CORS์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์‹์ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜ ๊ฐ„ ํ†ต์‹ ์—์„œ ์ข€ ๋” ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋น„๋™๊ธฐ ๋ฆฌ์†Œ์Šค ์š”์ฒญ API์ธ XMLHttpRequest ๊ฐ์ฒด๋‚˜ fetch API๋Š” ๋ณ„๋„์˜ ์˜ต์…˜ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ •๋ณด๋‚˜ ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ํ—ค๋”๋ฅผ ํ•จ๋ถ€๋กœ ์š”์ฒญ์— ๋‹ด์ง€ ์•Š๋Š”๋‹ค. ์ด๋•Œ ์š”์ฒญ์— ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด ๋ฐ”๋กœ credentials ์˜ต์…˜์ด๋‹ค.

์ด ์˜ต์…˜์—๋Š” ์ด 3๊ฐ€์ง€์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ๊ฐ’๋“ค์ด ๊ฐ€์ง€๋Š” ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • same-origin(๊ธฐ๋ณธ๊ฐ’): ๊ฐ™์€ ์ถœ์ฒ˜ ๊ฐ„ ์š”์ฒญ์—๋งŒ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • include: ๋ชจ๋“  ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • omit: ๋ชจ๋“  ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์ง€ ์•Š๋Š”๋‹ค.

๋งŒ์•ฝ same-origin์ด๋‚˜ include์™€ ๊ฐ™์€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ๋‹ค๋ฉด, ์ด์ œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋‹จ์ˆœํžˆ Access-Control-Allow-Origin๋งŒ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ข€ ๋” ๋นก๋นกํ•œ ๊ฒ€์‚ฌ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.


CORS ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

1) Access-Control-Allow-Origin ์„ธํŒ…ํ•˜๊ธฐ

CORS ์ •์ฑ… ์œ„๋ฐ˜์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€, ๊ทธ๋ƒฅ ์ •์„๋Œ€๋กœ ์„œ๋ฒ„์—์„œ Access-Control-Allow-Origin ํ—ค๋”์— ์•Œ๋งž์€ ๊ฐ’์„ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ ์™€์ผ๋“œ์นด๋“œ์ธ *์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ—ค๋”๋ฅผ ์„ธํŒ…ํ•˜๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  ์ถœ์ฒ˜์—์„œ ์˜ค๋Š” ์š”์ฒญ์„ ๋ฐ›์•„๋จน๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ๋‹น์žฅ์€ ํŽธํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•˜๋ฉด ์ •์ฒด๋„ ๋ชจ๋ฅด๋Š” ์ด์ƒํ•œ ์ถœ์ฒ˜์—์„œ ์˜ค๋Š” ์š”์ฒญ๊นŒ์ง€ ๋ชจ๋‘ ๋ฐ›์•„๋จน๊ฒ ๋‹ค๋Š” ์˜คํ”ˆ ๋งˆ์ธ๋“œ์™€ ๋‹ค๋ฅผ ๊ฒƒ ์—†์œผ๋ฏ€๋กœ ๋ณด์•ˆ์ ์œผ๋กœ ์‹ฌ๊ฐํ•œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ ๊ฐ€๊ธ‰์ ์ด๋ฉด ๊ท€์ฐฎ๋”๋ผ๋„ Access-Control-Allow-Origin: https://csstudy.github.io์™€ ๊ฐ™์ด ์ถœ์ฒ˜๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋„๋ก ํ•˜์ž.

์ด ํ—ค๋”๋Š” Nginx๋‚˜ Apache์™€ ๊ฐ™์€ ์„œ๋ฒ„ ์—”์ง„์˜ ์„ค์ •์—์„œ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์•„๋ฌด๋ž˜๋„ ๋ณต์žกํ•œ ์„ธํŒ…์„ ํ•˜๊ธฐ๋Š” ๋ถˆํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค ์ฝ”๋“œ ๋‚ด์—์„œ ์‘๋‹ต ๋ฏธ๋“ค์›จ์–ด ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. Spring, Express, Django์™€ ๊ฐ™์ด ์ด๋ฆ„์žˆ๋Š” ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋‘ CORS ๊ด€๋ จ ์„ค์ •์„ ์œ„ํ•œ ์„ธํŒ…์ด๋‚˜ ๋ฏธ๋“ค์›จ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์„ธํŒ… ์ž์ฒด๊ฐ€ ์–ด๋ ต์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค.


2) Webpack Dev Server๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹ฑํ•˜๊ธฐ

์‚ฌ์‹ค CORS๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ๋งˆ์ฃผ์น˜๋Š” ํ™˜๊ฒฝ์€ ๋ฐ”๋กœ ๋กœ์ปฌ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๊ณ  ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—๋Š” ์ด๋ฏธ Access-Control-Allow-Origin ํ—ค๋”๊ฐ€ ์„ธํŒ…๋˜์–ด์žˆ๊ฒ ์ง€๋งŒ, ์ด ์ค‘์š”ํ•œ ํ—ค๋”์—๋‹ค๊ฐ€ http://localhost:3000 ๊ฐ™์€ ๋ฒ”์šฉ์ ์ธ ์ถœ์ฒ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋Œ€๋ถ€๋ถ„ ์›นํŒฉ๊ณผ webpack-dev-server๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ์˜ ๋จธ์‹ ์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ฃผ ํŽธํ•˜๊ฒŒ CORS ์ •์ฑ…์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'https://api.csstudy.com',
        changeOrigin: true,
        pathRewrite: { '^/api': '' },
      },
    }
  }
}

์ด๋ ‡๊ฒŒ ์„ค์ •์„ ํ•ด๋†“์œผ๋ฉด ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ /api๋กœ ์‹œ์ž‘ํ•˜๋Š” URL๋กœ ๋ณด๋‚ด๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด ๋ธŒ๋ผ์šฐ์ €๋Š” localhost:8000/api๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ๋’ค์—์„œ ์›นํŒฉ์ด https://api.csstudy.com์œผ๋กœ ์š”์ฒญ์„ ํ”„๋ก์‹ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์น˜ CORS ์ •์ฑ…์„ ์ง€ํ‚จ ๊ฒƒ์ฒ˜๋Ÿผ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์†์ด๋ฉด์„œ๋„ ์šฐ๋ฆฌ๋Š” ์›ํ•˜๋Š” ์„œ๋ฒ„์™€ ์ž์œ ๋กญ๊ฒŒ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ”„๋ก์‹ฑ์„ ํ†ตํ•ด CORS ์ •์ฑ…์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“š ์ฐธ๊ณ 

CORS 1

CORS 2

CORS 3



Summary



โ‰๏ธ ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

  1. CORS์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.
  1. CORS ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ญ”๊ฐ€์š”?
  1. CORS preflight๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?