[Web] CORS(Cross-Origin Resource Sharing)

Goghยท2023๋…„ 1์›” 2์ผ
0

Web

๋ชฉ๋ก ๋ณด๊ธฐ
3/8

๐ŸŽฏ ๋ชฉํ‘œ : CORS์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ์ดํ•ดย 

๐Ÿ“’ CORS

  • Cross-Origin Resource Sharing์˜ ์•ฝ์ž์ด๋ฉฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ๋‹ค.
  • ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž์‹ ์˜ ์ถœ์ฒ˜(ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ(ํฌํŠธํฌํ•จ))์™€ ๋‹ค๋ฅผ๋•Œ ๊ต์ฐจ ์ถœ์ฒ˜ HTTP ์š”์ฒญ์„ ์‹คํ–‰ํ•œ๋‹ค.

๐Ÿ“Œ ์ถœ์ฒ˜(Origin)๋ž€?

  • CORS๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถœ์ฒ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€, SOP๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋จผ์ € ์ดํ•ด๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.
  • ์ถœ์ฒ˜๋Š” URL์—์„œ Protocol๊ณผ Host๋ฅผ ์ถœ์ฒ˜๋ผ ํ•˜๋ฉฐ, ์ด๋•Œ ์ถœ์ฒ˜๋Š” Port๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค.
  • https://sussa1933.tistory.com/manage/newpost/
  • ์œ„ ๋ธ”๋ก ๋ถ€๋ถ„์ด ์ถœ์ฒ˜๋ผ ํ• ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

๐Ÿ“Œย SOP(Same-Origin Policy)

  • ์›น์—์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ •์ฑ…์ด๋ฉฐ,
  • SOP๋Š” ๊ฐ™์€ ์ถœ์ฒ˜์—์„œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ• ์ˆ˜ ์žˆ๋‹ค๋ผ๋Š” ๊ทœ์น™์„ ๊ฐ€์ง„ ์ •์ฑ…์ด๋ผ ํ• ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์›น์—์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋Š” ์ผ์€ ์•„์ฃผ ํ”ํ•œ์ผ์ด๊ณ , ์ด ๋•Œ๋ฌธ์— ๋ช‡๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ๋‘๊ณ  ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์ด ํ—ˆ์šฉ ๋˜๋Š”๋ฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ CORS ์ •์ฑ…์— ํ—ˆ๊ฐ€๋œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์ด๋‹ค.

๐Ÿ‘‰ ๊ฐ™์€ ์ถœ์ฒ˜์˜ ๊ธฐ์ค€?

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” String Value๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ถœ์ฒ˜๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
  • http://localhost ์™€ ๊ฐ™์€ ์ถœ์ฒ˜๋กœ๋Š” http://localhost:80 , http://localhost/api/cors
  • ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ๋Š” http://127.0.0.1๋กœ ์˜ˆ๋ฅผ ๋“ค์ˆ˜ ์žˆ๊ฒ ๋‹ค.
  • ์‹ค์ œ๋กœ ์ ‘์†์„ ํ•ด๋ณด๋ฉด, ๊ฐ™์€๊ณณ์„ ์ถœ๋ ฅํ•˜์ง€๋งŒ ์ถœ์ฒ˜๋Š” ๋‹ค๋ฅด๋‹ค.
  • ์ด ์ถœ์ฒ˜๋ฅผ ๋น„๊ตํ•˜๊ณ  ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์€ ์„œ๋ฒ„์— ๊ตฌํ˜„๋œ ๋กœ์ง์ด ์•„๋‹ˆ๋ผ ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๋กœ์ง์ด๋‹ค.
  • ์ฆ‰, CORS๋ฅผ ์œ„๋ฐ˜ํ•œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ํ•˜๋”๋ผ๋„, ์‘๋‹ต ์„œ๋ฒ„์—์„œ ๊ฐ™์€ ์ถœ์ฒ˜์˜ ์š”์ฒญ๋งŒ ๋ฐ›๊ฒ ๋‹ค๋Š” ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์„œ๋ฒ„๋Š” ์ •์ƒ์ ์œผ๋กœ ์‘๋‹ต์„ ํ•˜๊ฒŒ๋˜๊ณ , ์‘๋‹ต์„ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €๋Š” CORS ์œ„๋ฐ˜์ด๋ผ ํŒ๋‹จํ•˜์—ฌ, ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์˜จ ์‘๋‹ต์„ ํ๊ธฐํ•œ๋‹ค.
  • ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์„ ํ• ๋•Œ๋Š” CORS๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‘๋‹ต์„ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” CORS ์œ„๋ฐ˜์œผ๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์„œ๋ฒ„์˜ ๋กœ๊ทธ๋Š” ์ •์ƒ์ ์œผ๋กœ ์‘๋‹ต์„ ํ–ˆ๋‹ค๋Š” ๋กœ๊ทธ๋งŒ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ“’ CORS์˜ ๋™์ž‘ ๋ฐฉ์‹

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ HTTP ์š”์ฒญ Header์— Origin์ด ํ•„๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ํ•„๋“œ์— ์ถœ์ฒ˜๋ฅผ ํ•จ๊ป˜ ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ• ๋•Œ ์‘๋‹ต Header์— Access-Control-Allow-Origin์ด๋ผ๋Š” ๊ฐ’์— ์š”์ฒญ ์ถœ์ฒ˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  Acces-Control-Allow-Credentials ์˜ ๊ฐ’์„ ์‘๋‹ตํ•˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ ํ–ˆ๋˜ Origin๊ณผ Access-Control-Allow-Origin์„ ๋น„๊ตํ•œ ํ›„ ์œ ํšจํ•œ ์‘๋‹ต์ธ์ง€ ์•„๋‹Œ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์œ„ ํ๋ฆ„์€ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ„์ผ ๋ฟ ๊ฐ ์š”์ฒญ์˜ ๋ฐฉ์‹๊ณผ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

๐Ÿ“Œ Preflight Request

  • ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ๋ฐฉ์‹์€ ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•œ์ง€ ํ™•์ธ ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” OPTIONS ์ด๋‹ค.

  • ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด https://foo.example ์—์„œ POST ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด,

  • POST ์š”์ฒญ์„ ํ•˜๊ธฐ์ „ OPTIONS ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ๋ฉ”์†Œ๋“œ, Content-Type๋“ฑ ์š”์ฒญ ์ •๋ณด๋ฅผ ๋ฉ”์„ธ์ง€์— ๋‹ด์•„ ์‚ฌ์ „ ์š”์ฒญ์„ ํ•œ๋‹ค.

  • OPTIONS ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„์—์„œ๋Š” ์š”์ฒญ ์ •๋ณด์— ๋”ฐ๋ฅธ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” Access-Control-Allow-Origin๊ณผ Acces-Control-Allow-Methods ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์‘๋‹ตํ•ด์ค€๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต์„ ํ™•์ธ ํ•œ ํ›„ ์‹ค์ œ ์š”์ฒญํ•˜๊ณ ์žํ•˜๋Š” POST ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์œ„ ๊ทธ๋ฆผ์€ ์ •์ƒ์ ์ธ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด์ง€๋งŒ,
    ๋งŒ์•ฝ ์„œ๋ฒ„์—์„œ ์‚ฌ์ „ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ Access-Control-Allow-Origin์˜ ๊ฐ’์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋ฉด, ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ถœ์ฒ˜๋งŒ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์‚ฌ์ „์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €๋Š” CORS ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค.

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

  • ๊ฐ ์š”์ฒญ, ์‘๋‹ต ๋ฉ”์„ธ์ง€์—์„œ์˜ ํ•ญ๋ชฉ๋“ค์„ ์ •๋ฆฌํ•˜์ž๋ฉด,

    • Origin : ์š”์ฒญ์ธก ์ถœ์ฒ˜ ์ •๋ณด
    • Access-Control-Allow-Origin : ์„œ๋ฒ„์—์„œ ํ—ˆ์šฉ๋œ ์ถœ์ฒ˜
    • Acces-Control-Allow-Methods : ์š”์ฒญ ์ธก์—์„œ๋Š” ์‚ฌ์šฉํ•  ๋ฉ”์†Œ๋“œ. ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ํ—ˆ์šฉ๋œ ๋ฉ”์†Œ๋“œ.
    • Acces-Control-Allow-Header : ์š”์ฒญ ์ธก์—์„œ๋Š” ์œ ํšจํ•œ Header์ธ์ง€ ์š”์ฒญ, ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ํ—ˆ์šฉ๋˜๋Š” Header ์ •๋ณด
    • Acces-Control-Max-Age : ์„œ๋ฒ„๊ฐ€ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์‘๋‹ต ์ˆ˜๋ช…. // sec

๐Ÿ“Œ Simple Request

  • ๋‹จ์ˆœ ์š”์ฒญ์€ ์‚ฌ์ „ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜๊ณ ์ž ํ•˜๋Š” ๋ณธ ์š”์ฒญ์„ ํ•˜๊ฒŒ๋œ๋‹ค.
  • ๋ณธ ์š”์ฒญ์„ ํ• ๋•Œ Origin ์ถœ์ฒ˜๋ฅผ ์š”์ฒญ ๋ฉ”์„ธ์ง€์— ํฌํ•จํ•˜์—ฌ ๋ณด๋‚ด์ฃผ๊ณ , ์„œ๋ฒ„์—์„œ ์‘๋‹ต์œผ๋กœ Access-Control-Allow-Origin์„ ๋ฐ›์•„ ๊ทธ๋•Œ์„œ์•ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” COSS ์œ„๋ฐ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
  • ์ด๋•Œ, ์ด๋ฏธ ์„œ๋ฒ„์—์„œ๋Š” ์ •์ƒ์ ์ธ ์‘๋‹ต๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ์ƒํƒœ์ด๋ฉฐ, ์‘๋‹ต์„ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ CORS ์œ„๋ฐ˜์œผ๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์„œ๋ฒ„์—์„œ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์ด๋ฏธ ๋๋‚œ ์ƒํƒœ์ธ ๊ฒƒ์ด๋‹ค.
  • ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์„œ๋ฒ„๋Š” ์ •์ƒ์ ์œผ๋กœ ์‘๋‹ต์„ ํ–ˆ๋‹ค๋Š” ๋กœ๊ทธ๋งŒ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ์• ๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋ฐ ์–ด๋ ค์›€์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ทธ๋ž˜์„œ, ์ด๋Ÿฐ ๋‹จ์ˆœ ์š”์ฒญ์˜ ๊ฒฝ์šฐ์—๋Š” ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์†Œ๋“œ๋Š” GET, HEAD, POST ์ค‘ ์—์„œ๋งŒ ํ—ˆ์šฉ๋œ๋‹ค.

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

Content-Type๋Š” application/x-www-form-urlencoded, multipart/form-data, text/plain๋งŒ ํ—ˆ์šฉ๋œ๋‹ค

  • ๋ณดํ†ต ์œ„์™€ ๊ฐ™์€ ํŠน์ • ์กฐ๊ฑด์— ์ถฉ์กฑํ•˜๊ธฐ๋ž€ ์–ด๋ ต๋‹ค, ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ“Œ Credentialed Request

  • ์ธ์ฆ๋œ ์š”์ฒญ์„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.ย ย 
  • ๋‹ค๋ฅธ ์ถœ์ฒ˜๊ฐ„ ํ†ต์‹ ์—์„œ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ ์ž ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋™๊ธฐ ๋ฆฌ์†Œ์Šค ์š”์ฒญ API์ธ XMLHttpRequest ๊ฐ์ฒด๋‚˜ fetch API๋Š” ๋ณ„๋„ ์˜ต์…˜ ์—†์ด ์ฟ ํ‚ค ์ •๋ณด๋‚˜ ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ํ—ค๋”๋ฅผ ์š”์ฒญ ๋ฉ”์„ธ์ง€์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค ํ•˜์ง€๋งŒ, ์ด๋Ÿฐ ์ •๋ณด๋ฅผ ํฌํ•จ ํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด credentials ์˜ต์…˜์ด๋‹ค.
  • same-origin(default value) :ย  ๊ฐ™์€ ์ถœ์ฒ˜๊ฐ„์˜ ์š”์ฒญ์—๋งŒ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์„์ˆ˜ ์žˆ๋‹ค.
  • include : ๋ชจ๋“  ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์„์ˆ˜ ์žˆ๋‹ค.
  • omit : ๋ชจ๋“  ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์„์ˆ˜ ์—†๋‹ค.
  • ๋งŒ์•ฝ credentials ์˜ต์…˜์ด include ๋ผ๋ฉด CORS ์กฐ๊ฑด ์™ธ์— 2๊ฐ€์ง€ ์กฐ๊ฑด์ด ์ถ”๊ฐ€๋œ๋‹ค.
  1. Access-Control-Allow-Origin์— ์™€์ผ๋“œ ์นด๋“œ *๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ช…์‹œ์ ์ธ URL์ด์–ด์•ผ ํ•œ๋‹ค.
  2. ์‘๋‹ต ํ—ค๋”์—๋Š” ๋ฐ˜๋“œ์‹œ Access-Control-Allow-Credentials : true ๊ฐ€ ์กด์žฌ ํ•ด์•ผํ•œ๋‹ค.

Reference

https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

https://portswigger.net/web-security/cors

profile
์ปดํ“จํ„ฐ๊ฐ€ ํ• ์ผ์€ ์ปดํ“จํ„ฐ๊ฐ€

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