SOP์™€ CORS

1TBhardยท2023๋…„ 1์›” 28์ผ
0

FrontEnd๋ฉด์ ‘

๋ชฉ๋ก ๋ณด๊ธฐ
7/7
post-thumbnail

๐Ÿ“Œ SOP์™€ CORS์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ๋‹ค๋ฅธ ํŽ˜์ด์ง€์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ CORS ์—๋Ÿฌ๋ผ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ SOP์— ์˜ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค.

SOP

๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…(SOP: Same-origin policy) ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋“ค์€ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ์ดˆ๊ธฐํ™”๋˜๋Š” cross-origin HTTP ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค.

๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค(๋ฌธ์„œ, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ)์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜์—ฌ ์ž ์žฌ์  ์•…์„ฑ ๋ฌธ์„œ๋ฅผ ๊ฒฉ๋ฆฌํ•œ๋‹ค.

โš ๏ธ SOP๋ฅผ ์œ„๋ฐ˜ํ–ˆ๋Š”์ง€๋Š” ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธํ•œ๋‹ค.

๋™์ผ ์ถœ์ฒ˜

๋™์ผ ์ถœ์ฒ˜๋ž€ ๋‘ URL์˜ ํ”„๋กœํ† ์ฝœ, ํฌํŠธ(๋ช…์‹œํ•œ ๊ฒฝ์šฐ), ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์ถœ์ฒ˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด http://store.company.com/dir/page.html์™€ ๋™์ผ ์ถœ์ €์ธ ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

URL๋™์ผ ์ถœ์ฒ˜์ด์œ 
http://store.company.com/dir2/other.htmlโœ…
http://store.company.com/dir/inner/another.htmlโœ…
https://store.company.com/secure.htmlโŒํ”„๋กœํ† ์ฝœ(https)์ด ๋‹ค๋ฆ„
http://store.company.com:81/dir/etc.htmlโŒํฌํŠธ(:81)๊ฐ€ ๋‹ค๋ฆ„
http://news.company.com/dir/other.htmlโŒํ˜ธ์ŠคํŠธ(news)๊ฐ€ ๋‹ค๋ฆ„

๊ต์ฐจ ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ SOP ์˜ํ–ฅ โŒ

์•„๋ž˜์™€ ๊ฐ™์€ ๊ต์ฐจ ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ SOP์— ์ƒ๊ด€์—†์ด ํ—ˆ์šฉ๋œ๋‹ค.

  • <link> ํƒœ๊ทธ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ CSS๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ
  • <script> ํƒœ๊ทธ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ JavaScript ๊ฐ€์ ธ์˜ค๊ธฐ
    • ๋‹จ, ํŠน์ • API์—๋Š” ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์Œ
  • <img>, <video>, <audio>, <embed>, <object>
  • <iframe>์œผ๋กœ ์‚ฝ์ž…๋˜๋Š” ๋ชจ๋“  ๊ฒƒ
    • <iframe> ์€ Clickjacking ๊ณต๊ฒฉ์„ ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Clickjacking ๊ณต๊ฒฉ(UI ๊ต์ • ๊ณต๊ฒฉ) : ํŽ˜์ด์ง€ ํด๋ฆญ์‹œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์˜ ๋ฒ„ํŠผ์ด๋‚˜ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋„๋ก ์†์ด๋Š” ๊ณต๊ฒฉ
  • CSS, @font-face (์ผ๋ถ€ ๋ธŒ๋Ÿฌ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ)
    • @font-face: ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ํ•ด๋‹น ์„œ์ฒด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•จ

โš ๏ธ ๊ต์ฐจ ์ฝ๊ธฐ(JS๋กœ ์ ‘๊ทผํ•œ ๊ฒฝ์šฐ)๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

โš ๏ธ IE ์˜ ๊ฒฝ์šฐ SOP์— ๋‘๊ฐ€์ง€ ์ค‘์š” ์˜ˆ์™ธ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

  • ์‹ ๋ขฐ๊ฐ€๋Šฅํ•œ ์‚ฌ์ดํŠธ: ์–‘์ชฝ ๋„๋ฉ”์ธ ๋ชจ๋‘๊ฐ€ ๋†’์Œ ๋‹จ๊ณ„์˜ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋™์ผ ์ถœ์ฒ˜ ์ œ์•ฝ์„ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํฌํŠธ ๋ฌด์‹œ : ํฌํŠธ๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ๋™์ผ ์ถœ์ฒ˜๋กœ ์—ฌ๊น€

CORS

SOP(Same Origin Policy) ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์ž์›์„ ์“ธ ์ˆ˜ ์—†๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ CORS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

CORS(Cross-Origin Resource Sharing)๋Š” ๋„๋ฉ”์ธ ๋˜๋Š” ํฌํŠธ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ๋งํ•œ๋‹ค.
์ฆ‰, ๋‹ค๋ฅธ ์ถœ์ €์˜ ์„œํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.
์ด๋•Œ ์š”์ฒญ์€ cross-origin HTTP ์— ์˜ํ•ด ์š”์ฒญ๋œ๋‹ค.

๐Ÿ’ก ์ถœ์ฒ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๋กœ์ง์€ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ, SOP๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ํ•ด๋„ ์„œ๋ฒ„์—์„œ๋Š” ์ •์ƒ ์‘๋‹ต์„ ํ•œ ๋กœ๊ทธ๋กœ ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก SOP ๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์˜ ํ—ค๋”์— Origin, referer ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • Origin: ์š”์ฒญ์ด ์‹œ์ž‘๋œ ์„œ๋ฒ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” url
  • referer: ํ˜„์žฌ ์š”์ฒญ๋œ ํŽ˜์ด์ง€์˜ ๋งํฌ ์ด์ „์˜ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ

CORS ์‚ฌ์šฉ ์˜ˆ์‹œ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์ฒญ์— CORS๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

  • XMLHttpRequest, Fetch ํ˜ธ์ถœ
  • CSS, @font-face (์ผ๋ถ€ ๋ธŒ๋Ÿฌ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ)
  • WebGL ํ…์Šค์ณ
  • drawImage()๋ฅผ ์‚ฌ์šฉํ•ดย ์บ”๋ฒ„์Šค์— ๊ทธ๋ฆฐ ์ด๋ฏธ์ง€/๋น„๋””์˜ค ํ”„๋ ˆ์ž„
  • ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ถ”์ถœํ•˜๋Š”ย CSS Shapes
    img {
    float: left;
    		/* ์—ฌ๋ฐฑ์„ ํ•ด๋‹น ๋ชจ์–‘์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ๊ฒŒ ํ•จ */
    shape-outside: url(../images/star-shape1.png);
    }

JavaScript, CSS ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋“ค์€ Cross-Origin ์ •์ฑ…์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(์œ„์˜ ๋™์ผ ์ถœ์ฒ˜ ํ—ˆ์šฉ ์ฐธ์กฐ)

COR ๋™์ž‘

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ Origin ํ•„๋“œ์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ถœ์ฒ˜ ๋ฅผ ํ•จ๊ป˜ ๋‹ด์•„์„œ ๋ณด๋ƒ„
  2. ์„œ๋ฒ„์—์„œ Accewss-Control-Allow-Origin์— ๋ฆฌ์†Œ์Šค ์ถœ์ฒ˜๋ฅผ ์ฃผ๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ์—์„œ ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Origin๊ณผ Access-Control-Allow-Origin์„ ๋น„๊ตํ•˜์—ฌ SOP๋ฅผ ์œ„๋ฐ˜ํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋™์ž‘์€ ์•„๋ž˜์˜ 3๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์˜ํ•ด ๋‹ค์‹œ ๋‹ฌ๋ผ์ง„๋‹ค.

  • Preflight Request
  • Simple Request
  • Credentialed Request

Preflight Request

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์˜ˆ๋น„์š”์ฒญ๊ณผ ๋ณธ ์š”์ฒญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ์˜ˆ๋น„์š”์ฒญ์„ Preflight ๋ผ๊ณ  ํ•œ๋‹ค.

  • ์‹ค์ œ ์š”์ฒญ์ด ์ „์†กํ•˜๊ธฐ ์•ˆ์ „ํ•œ์ง€ ํ™•์ธํ•จ
  • ์ผ๋ฐ˜์ ์œผ๋กœ CORS๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์š”์ฒญ์ด๋‹ค.
  • OPTIONS ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Preflight Request์„ ๋ณด๋‚ธ๋‹ค.
    • OPTIONS ๋ฉ”์„œ๋“œ๋Š” ๋ชฉํ‘œ ๋ฆฌ์†Œ์Šค์™€์˜ ํ†ต์‹  ์˜ต์…˜์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ

๐Ÿ’ก Preflight Request๋กœ ์•„๋ž˜์˜ ์ •๋ณด๋ฅผ ๋„ฃ์–ด ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.

  • Access-Control-Request-Method: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ
  • Access-Control-Request-Headers: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ผ HTTP headers

Simple Request

๋ช…ํ™•ํ•œ ๋ช…์นญ์€ ์—†์ง€๋งŒ Prefilght Request๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋‹จ์ˆœ ์š”์ฒญ(Simple Request)์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • Preflight Request ๋ณด๋‚ด์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์„œ๋ฒ„์— ์š”์ฒญ
  • ์„œ๋ฒ„๋Š” ์‘๋‹ต์˜ ํ—ค๋”์— Access-Control-Allow-Origin๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์ฃผ์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ SOP ์œ„๋ฐ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ฒŒ ํ•จ
    • Access-Control-Allow-Origin: * | <origin> | null
    • Access-Control-Allow-Origin: <origin> ์ธ ๊ฒฝ์šฐ Vary ์†์„ฑ๋„ ๊ฐ™์ด ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค. (MDN ์ฐธ๊ณ )

๐Ÿ“– Vary ํ—ค๋” ์†์„ฑ์€ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์บ์‹œ ์‘๋‹ต์„ ์ œ๊ณตํ• ์ง€ ๋˜๋Š” ์›๋ณธ ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ์‘๋‹ต์„ ์š”์ฒญํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐ’์ด๋‹ค.

โš ๏ธ Simple Request๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ์ „๋ถ€ ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค.

  • GET, HEAD, POST ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉ
  • Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width๋ฅผ ์ œ์™ธํ•œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • Content-Type ์‚ฌ์šฉ์‹œ application/x-www-from-urlencoded, multipart/form-data, text/plain ๋งŒ์ด ํ—ˆ์šฉ

Credentialed Request

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

์ธ์ฆ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ JS๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•ด ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์š”์ฒญ ํ—ค๋”์— credentials ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ธ์ฆ ๊ด€๋ จ๋œ ํ—ค๋”๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ 3๊ฐ€์ง€ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ์ƒํƒœ ์—์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” SOP ์œ„๋ฐ˜ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ทœ์น™์— ๋‹ค์Œ ๋‘๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • Access-Control-Allow-Origin์—๋Š” *๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • ์‘๋‹ต ํ—ค๋”์—๋Š” ๋ฐ˜๋“œ์‹œ Allow-Control-Allow-Credentials: true ๊ฐ€ ์กด์žฌํ•ด์•ผํ•จ

์ •๋ฆฌ

  • SOP(Same Orgin Policy)๋Š” ๊ฐ™์€ origin์„ ๊ฐ€์ง„ ๋ฆฌ์†Œ์Šค๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ •์ฑ…์ด๋‹ค.
  • CORS(Cross Orgin Resource Sharing)๋Š” ๋„๋ฉ”์ธ ๋˜๋Š” ํฌํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ origin ๊ฐ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ์–ดํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‹ค.
    • CORS ์ด์Šˆ๋Š” SOP์— ์˜ํ•ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ SOP๋ฅผ ๊ด€๋ฆฌํ•˜์ง€๋Š” ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.
    • ๋‹จ ์„œ๋ฒ„์—์„œย origin์ด๋‚˜ referer๋ฅผ ํ™•์ธํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ• ์ˆ˜๋Š” ์žˆ๋‹ค. (CORS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋ฅผ ํ™•์ธํ•œ๋‹ค.)
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‚ด๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์•„๋„ย cross origin request ๋ผ๋ฉด originํ—ค๋”์™€ refererํ—ค๋”๋ฅผ ์ž๋™์œผ๋กœ ๋ถ™ํ˜€์ค€๋‹ค.


์ฐธ์กฐ

profile
๊ธฐ์–ต์„ ๋„˜์–ด ์Šต๊ด€์œผ๋กœ

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