CORS(Cross-Origin Resource Sharing)

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ same-origin policy(๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…)์— ๋”ฐ๋ผ ์ œํ•œ๋˜๋Š” ๋„๋ฉ”์ธ ๊ฐ„ ์ž์› ๊ณต์œ ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋งค์ปค๋‹ˆ์ฆ˜

Same-Origin Policy(๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…)

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์•ˆ ์ƒ์˜ ์ด์œ ๋กœ, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„๋ฉ”์ธ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๋„๋ฉ”์ธ์ด ๋™์ผํ•ด์•ผํ•˜๋Š” ๊ทœ์น™์œผ๋กœ, ์œ„๋ฐฐ๋˜๋Š” ์ƒํ™ฉ์—๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๊ฒŒ ๋œ๋‹ค.

Cross-Origin

cross-origin์˜ ์ข…๋ฅ˜๋Š” ์•„๋ž˜๋กœ ์ •์˜๋œ๋‹ค.

  • ๋‹ค๋ฅธ ๋„๋ฉ”์ธ (example.com - test.com)

  • ๋‹ค๋ฅธ ํ•˜์œ„ ๋„๋ฉ”์ธ (example.com - store.example.com)

  • ๋‹ค๋ฅธ ํฌํŠธ (example.com:80 - example.com:90)

  • ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ (https://example.com - http://example.com)

์—ฌ๊ธฐ์„œ https://example.com๊ณผ https://www.example.com์€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

์˜ˆ์‹œ(๊ธฐ์ค€ http://store.ogufamily.com)

URLResultReason

http://store.ogufamily.com/babyogu.html

same origin

path๋งŒ ๋‹ค๋ฅธ๊ฒฝ์šฐ

http://store.ogufamily.com/ogu.html

same origin

path๋งŒ ๋‹ค๋ฅธ๊ฒฝ์šฐ

https://store.ogufamily.com

cross origin

ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ

http://store.ogufamily.com:81

cross origin

ํฌํŠธ๊ฐ€ ๋‹ค๋ฅธ๊ฒฝ์šฐ

http://news.ogufamily.com

cross origin

๋„๋ฉ”์ธ์ด ๋‹ค๋ฅธ๊ฒฝ์šฐ

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

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ํŽ˜์ด์ง€์—์„œ JavaScript๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ๋ฆฌ์†Œ์Šค(cross-origin) ์š”์ฒญ

  2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ HTTP ํ—ค๋”์— Origin ๊ฐ’์„ ๋„ฃ์–ด ์ „์†ก

  3. ์„œ๋ฒ„์—์„œ Origin ๊ฐ’์„ ํ™•์ธ

  4. ์„œ๋ฒ„์—์„œ ์‘๋‹ต์˜ Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ํ—ˆ์šฉํ•  Origin์„ ์ „์†ก

  5. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‘๋‹ต์˜ Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํ™•์ธํ•˜์—ฌ ์ž์‹ ์˜ ๋„๋ฉ”์ธ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ

์œ„์˜ ๊ณผ์ •์—์„œ ์ผ์น˜ํ•œ๋‹ค๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ณ , ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์•„๋ž˜์˜ ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

*** has sbeen blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

์–ธ์–ด ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ๋ณ„๋กœ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅด์ง€๋งŒ ์„œ๋ฒ„ ์ชฝ์—์„œ Origin ์„ค์ •์„ ํ•ด์ฃผ์–ด ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Preflight

๋‹จ์ˆœ ์š”์ฒญ์ด ์•„๋‹ ๊ฒฝ์šฐ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์ „์†กํ•˜๋Š” ์š”์ฒญ์ด๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์™€ ๊ต์‹ ํ•  ๋•Œ ํŠน์ • ์กฐ๊ฑด์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฃผ๋กœ CORS์™€ ๊ด€๋ จ๋œ ์š”์ฒญ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ํ—ˆ์šฉ๋œ ์š”์ฒญ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ OPTIONS /resource ์š”์ฒญ์„ Origin ํ—ค๋”์™€ ํ•จ๊ป˜ ์ „์†ก

  2. ์„œ๋ฒ„์—์„œ Access-Control-* ํ—ค๋”์™€ ํ•จ๊ป˜ ์‘๋‹ต(์„ฑ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ 200 OK)

    • Access-Control-Allow-Origin : ํ—ˆ์šฉ origin

    • Access-Control-Allow-Methods : ํ—ˆ์šฉ method

    • Access-Control-Allow-Headers : ํ—ˆ์šฉ header

    • Access-Control-Max-Age : preflight ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•  ์‹œ๊ฐ„

  3. ํด๋ผ์ด์–ธํŠธ์—์„œ Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํ™•์ธํ•˜์—ฌ ์‹ค์ œ ๋ณธ ์š”์ฒญ์„ ์ „์†กํ• ์ง€ ๊ฒฐ์ •

  4. preflight ์œ ํšจ ์‹œ๊ฐ„ ๋™์•ˆ ์บ์‹ฑํ•˜์—ฌ ๋‹ค์Œ ์š”์ฒญ๋ถ€ํ„ฐ๋Š” preflight ์š”์ฒญ์„ ์ƒ๋žตํ•˜๊ณ  ๋ฐ”๋กœ ๋ณธ ์š”์ฒญ์„ ์ „์†ก

์ฐธ๊ณ ์ž๋ฃŒ

Last updated