๐Ÿค“CORS(Cross - origin resource sharing)

์ด์ง„ํฌยท2022๋…„ 6์›” 12์ผ
0

๊ฐœ๋…์ •๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
10/10
post-custom-banner

CORS (Cross - origin resource sharing)

CORS ์ •์ฑ…์€ ์šฐ๋ฆฌ๊ฐ€๊ฐ€์ ธ์˜ค๋Š” ๋ฆฌ์†Œ์Šค๋“ค์ด ์•ˆ์ „ํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ด€๋ฌธ์ด๋‹ค!

์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ!

ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์†์ค‘์ธ ํŽ˜์ด์ง€์—์„œ JS๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๋˜๋Š” ํฌํŠธ๋ฅผ ๊ฐ€์ง„ ์ฃผ์†Œ๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์„ ํ—ˆ์šฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์•ˆ์„ ๋†’์ด๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค.

HTML : ๊ธฐ๋ณธ์ ์œผ๋กœ Cross-Origin์ •์ฑ…์„ ๋”ฐ๋ฅธ๋‹ค.

  • link ํƒœ๊ทธ์—์„œ ๋‹ค๋ฅธ origin์˜ css๋“ฑ์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

  • img ํƒœ๊ทธ ๋“ฑ์—์„œ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

XMLHttpRequest, Fetch API๋“ฑ script ํƒœ๊ทธ ๋‚ด : ๊ธฐ๋ณธ์ ์œผ๋กœ Same-Origin์ •์ฑ…์„ ๋”ฐ๋ฆ„

  • JS๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ณด์•ˆ์ƒ ์ œ์•ˆํ•œ๋‹ค.(๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ์„ค์ •์€ ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ์—ฐ๊ฒฐ๋งŒ์„ ํ—ˆ์šฉ!)
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฃผ์†Œ(๋„๋ฉ”์ธ, ํฌํŠธ ์ค‘ ํ•˜๋‚˜๋ผ๋„)๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค์˜ ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จ!

๐Ÿ“CORS ํƒ„์ƒ๋ฐฐ๊ฒฝ


์ด์ „์˜ ๋ธŒ๋ผ์šฐ์ € ์ •์ฑ…์œผ๋กœ๋Š” ์˜ค๋ฆฌ์ง„์ด ๋‹ค๋ฅด๋ฉด ์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์—†์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ์€ CORS๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์˜ค๋ฆฌ์ง„๊ณผ ์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์ž.

์ด์ „์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์„ ํ•˜๋ฉด HTML Page๋ฅผ ๋‚ด๋ ค์ฃผ๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

๐Ÿ”ฅ์›น ์‚ฌ์ดํŠธ์˜ ๋ฐœ์ „

ํ•˜์ง€๋งŒ ์›น ์‚ฌ์ดํŠธ์—์„œ ๋‹จ์ˆœ ๋ฌธ์„œ ์ œ๊ณต๋งŒ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋˜๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๋ณด์•ˆ ์ •์ฑ…์œผ๋กœ ์ธํ•œ ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒ์„ ํ•˜์˜€๋‹ค.

์‚ฌ๋žŒ๋“ค์€ Web Server๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ํ•œ๋ฒˆ์— ํ†ต์‹ ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ์œผ๋ฉฐ,

๊ฐœ๋ฐœ์ž๋“ค์€ JSONP๋ผ๋Š” ์šฐํšŒ์ ์ธ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์—ฌ ํ†ต์‹ ์„ ํ•˜์˜€๋‹ค.

ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ € ์ž…์žฅ์—์„œ๋Š” ์ด๋Ÿฐ ์šฐํšŒ์ ์ธ ๋ฃจํŠธ๋กœ ๋ณด์•ˆ์„ ๋ฌด๋ ฅํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์น˜ํ•  ์ˆ˜๋Š” ์—†์—ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๋„ˆ๋ฌด ๋งŽ์€ ์ˆ˜์š”๊ฐ€ ์žˆ์—ˆ๊ธฐ์— ์ด ๋ฐฉ์‹์„ ๋ง‰์•„๋ฒ„๋ฆด ์ˆ˜๋„ ์—†์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์šฐํšŒ์ ์ธ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ๊ณต์‹์ ์ธ ๋ฃจํŠธ๋ฅผ ์ œ์‹œํ•ด์ฃผ์—ˆ๋‹ค.

๊ทธ๊ฒŒ ๋ฐ”๋กœ CORS์ด๋‹ค.๐Ÿค—


์ถœ์ฒ˜(Origin)๋ž€?

: Protocol + Host + Port


๐Ÿค”๋ฌธ์ œ๋ฐœ์ƒ ์ด์œ 

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋˜ ์ฃผ์†Œ์— โ€œOPTIONSโ€ Method๋ฅผ ์ด์šฉํ•ด ์š”์ฒญ์„ ์˜๋„์ ์œผ๋กœ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š”๊ฒŒ ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. (CORS preflight)
  2. ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ํ‰์†Œ์™€ ๋˜‘๊ฐ™์ด ์‘๋‹ต์„ ํ•œ๋‹ค.
  3. ์‘๋‹ต์„ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  CORS ์—๋Ÿฌ๋ฐœ์ƒ!
  • ์ด๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌํ˜„๋œ ๋น„๋™๊ธฐ ์š”์ฒญ API์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ๊ทœ์น™์œผ๋กœ, Thunder Client ๊ฐ™์€ API Client๋ฅผ ์ด์šฉํ•ด ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.(local ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐœ์ƒX)

๐Ÿ“CORS ๊ธฐ๋ณธ ๋™์ž‘๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ HTTP ์š”์ฒญํ—ค๋”์— Origin์„ ๋‹ด์•„ ์ „๋‹ฌํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์‘๋‹ตํ—ค๋”์— Access-Control-Allow-Origin์„ ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ์—์„œ, ์ž์‹ ์ด ๋ณด๋ƒˆ๋˜ ์š”์ฒญ์˜ Origin๊ณผ ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด์ค€ Access-Contorl-Allow-Origin์„ ๋น„๊ตํ•œ๋‹ค.

๐Ÿ‘‰ ๋น„๊ตํ›„ ๋งŒ์•ฝ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฒ„๋ฆฐ๋‹ค.(์ฐจ๋‹จ!)


๐Ÿ“CORS์˜ ์„ธ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค

1. ๊ธฐ๋ณธ ์š”์ฒญ(๋‹จ์ˆœ ์š”์ฒญ) Simple Request


์˜ˆ๋น„ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ , ๋ฐ”๋กœ HTTP Request๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹.
์ด ๋ฐฉ์‹์€ ๋ฐ‘์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ์ ์šฉ๋œ๋‹ค.

  • GET, POST, HEAD ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ์ด ๋˜์—ˆ์„ ๋•Œ
  • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์ •ํ•œ ํ—ค๋”๋“ค๋งŒ์„ ํฌํ•จํ•  ๋•Œ
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

2.Preflight Request

๋ธŒ๋ผ์šฐ์ €๋Š” ์˜ˆ๋น„์š”์ฒญ์„ HTTP method ์ค‘ OPTIONS๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™•์ธ ์‚ฌํ•ญ์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

  • Origin : ์ถœ์ฒ˜ ์ •๋ณด (์„œ๋ฒ„์—์„œ ํ—ˆ๋ฝํ•œ ์ถœ์ฒ˜์˜ ์š”์ฒญ์ธ์ง€ ๊ฒ€์‚ฌ)
  • Access-Control-Request-Method : HTTP METHOD๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ
  • Access-Control-Request-Headers : ๋ณธ ์š”์ฒญ์— HTTP์˜ HEADER๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ

์„œ๋ฒ„๋Š” ํ•ด๋‹น ์˜ˆ๋น„์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํ—ˆ๋ฝ๋œ ์ •์ฑ…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • Access-Contorl-Allow-Origin : ์„œ๋ฒ„๊ฐ€ ํ—ˆ๋ฝํ•œ ์ถœ์ฒ˜๋“ค (Protocol + Host + Port)
  • Access-Control-Allow-Methods : ํ—ˆ๋ฝํ•œ HTTP Method ๋ฆฌ์ŠคํŠธ ์—…
  • Access-Control-Allow-Headers : ํ—ˆ์šฉ๋˜๋Š” HEADERS ์ •๋ณด
    ( ' * ' ์™€์ผ๋“œ ์นด๋“œ์‹œ ์ „๋ถ€ ํ—ˆ์šฉํ•˜์ง€๋งŒ, Authorization์€ ๋”ฐ๋กœ ๋ช…์‹œํ•ด์•ผ๋จ)
  • Access-Control-Max-Age : ์„œ๋ฒ„๊ฐ€ preflight์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์˜ ์ˆ˜๋ช… (์ดˆ ๋‹จ์œ„)

โœ”๏ธํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด ์˜ˆ๋น„์š”์ฒญ์˜ ์‘๋‹ต ์„ฑ๊ณต์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด CORS์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€๋”์”ฉ Preflight Request๊ฐ€ 200 ์„ฑ๊ณต ์‘๋‹ต์„ ์ฃผ์—ˆ์–ด๋„ ๋ธŒ๋ผ์šฐ์ €์— CORS์—๋Ÿฌ๊ฐ€ ๋‚˜์™€ ๋งŽ์ด ๋‹นํ™ฉํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋Š” ์ด์œ ๋Š” ์ผ๋‹จ CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ ์ด ์˜ˆ๋น„ ์š”์ฒญ์„ ๋ฐ›๊ณ ๋‚œ ์งํ›„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. preflight request์—์„œ ๊ฒ€์‚ฌํ•œ ์ •๋ณด์—์„œ ๋” ์ถ”๊ฐ€๋œ ์ •๋ณด๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ๋ฉ”์ธ ์š”์ฒญ์˜ URL์ด ๋‹ฌ๋ผ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ธ ์š”์ฒญ์—์„œ CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด Preflight Request ๋ฐฉ์‹์€ Simple Request ๋ฐฉ์‹์— ์ ์šฉ๋  ์ˆ˜ ์—†์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, Simple Request์— ํ•ด๋‹น ์‚ฌํ•ญ์ด ์—†๋‹ค๋ฉด ์˜ˆ๋น„์š”์ฒญ์ด ๋ฐœ์ƒ ๋ฉ๋‹ˆ๋‹ค.

3.Credential Request(์ธ์ฆ ์š”์ฒญ)

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

์ด credential์€ 3๊ฐ€์ง€ ์˜ต์…˜์„ ๊ฐ€์ง€๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด fectch๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜ต์…˜๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ผ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธcredentials ์˜ต์…˜์„ include๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ, CORS ์ •์ฑ…์— 2๊ฐ€์ง€ ํ•ญ๋ชฉ์ด ๋” ์ถ”๊ฐ€๋œ๋‹ค.
1. Access-Control-Allow-Origin์—๋Š” *๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ช…์‹œ์ ์ธ URL์ด์–ด์•ผํ•œ๋‹ค.
2. ์‘๋‹ต ํ—ค๋”์—๋Š” ๋ฐ˜๋“œ์‹œ Access-Control-Allow-Credentials: true๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.

Credentials ์˜ต์…˜

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

๐Ÿ“CORS ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  1. Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ด์šฉ: Allow CORS : Access-Control-Allow-Origin ์„ค์น˜!
  2. ์„œ๋ฒ„์—์„œ Access-Control-Allow-Origin ์„ธํŒ…ํ•˜๊ธฐ
res.setHeader(โ€™Access-Control-Allow-originโ€™, โ€˜*โ€™); 
//'*'์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  origin์—์„œ ์˜ค๋Š” ์š”์ฒญ์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, 
// ๋‹น์žฅ์€ ํŽธํ•ด๋„ ์ด์ƒํ•œ ์ถœ์ฒ˜์—์„œ ์˜ค๋Š” ์š”์ฒญ๊นŒ์ง€ ๋ชจ๋‘ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ด ํ—ˆ์ˆ ํ•ด์ง!
// ๊ทธ๋Ÿฌ๋‹ˆ ์กฐ๊ธˆ ๋ถˆํŽธํ•˜๋”๋ผ๋„ ํŠน์ • ๋„๋ฉ”์ธ๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑธ๋กœ ํ•˜๋Š”๊ฒŒ ์ข‹์Œ!
res.setHeader(โ€™Access-Control-Allow-Credentialsโ€™ โ€˜trueโ€™);  //์ฟ ํ‚ค ์ฃผ๊ณ ๋ฐ›๊ธฐ ํ—ˆ์šฉ

โœ”๏ธ๋ชจ๋“ˆ์„ค์น˜๋ฐฉ๋ฒ•

  • ํ„ฐ๋ฏธ๋„์— npm i cors ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด CORS ๋ชจ๋“ˆ ์„ค์น˜

  • ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€

    • ๋ชจ๋“  ์š”์ฒญ ํ—ˆ์šฉ :

      app.use(cors());
    • ํŠน์ • ๋„๋ฉ”์ธ๋งŒ ํ—ˆ์šฉ:

      const corsOption = {
        origin: "https://www.test-cors.org",
        credentials: true,
      };
      
      app.use(cors(corsOption));

โ›ต2022.06.02-09

ํ•ญํ•ดํ†ก์„ ์ค€๋น„ํ•˜๋ฉฐ CORS์— ๋Œ€ํ•ด ์ง€๊ธ‹!์ง€๊ธ‹!ํ•˜๊ฒŒ ๋“ค์€ ๊ฒƒ๊ฐ™๋‹ค.
์˜ค๋ฆฌ์ง„ํฌ๋ผ๋Š” ๋ณ„์นญ๋„ ์–ป์œผ๋ฉฐ ๋๋‚ฌ๋˜ CORSํ•ญํ•ดํ†ก!

๊ทธ๋ž˜๋„ ์ด ์—๋Ÿฌ์— ๋Œ€ํ•ด ์ œ๋Œ€๋กœ ์•Œ๊ณ ๊ฐ€๊ฒŒ ๋˜์–ด์„œ ๋‹คํ–‰์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค.
๋‚ด๊ฐ€ ์ผ์„ ํ• ๋•Œ, ํ”„๋ก ํŠธ์—์„œ ์ด๋Ÿฌํ•œ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค๋ฉด ๋ˆ„๊ตฌ์˜ ํƒ“๋งŒ ํ•  ๊ฒŒ ์•„๋‹ˆ๋ผ ์„œ๋กœ ํ™•์ธํ•˜๊ณ  ๋งž์ถฐ๋‚˜๊ฐ€์•ผํ•œ๋‹ค๋Š” ๊ฑธ ๋”์šฑ ๋Š๋ผ๊ฒŒ ๋˜์—ˆ๊ณ , ๋”์šฑ ์„œ๋กœ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ๊ฐ™์•˜๋‹ค.

ํ™•์‹คํžˆ ์‹œ์ž‘๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ์„ฑ์žฅํ–ˆ๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ค์–ด ๊ธฐ๋ถ„์ด ๊ต‰์žฅํžˆ ์ข‹๋‹ค.
๋‚˜์ž์‹  ๊ต‰์žฅํžˆ ์นญ์ฐฌํ•ด!

์ œ๋ฐœ ๋‚˜ํƒœํ•ด์ง€์ง€๋งŒ ๋ง๊ณ  ๋๊นŒ์ง€ ํ•ด๋ณด์ž!๐Ÿค“

post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€