CORS

CORS (Cross-Origin Resource Sharing, ๊ต์ฐจ ์ถœ์ฒ˜ ์ž์› ๊ณต์œ )

์ •์˜

๊ต์ฐจ ์ถœ์ฒ˜(Cross Origin) ๊ฐ„ ๋ฆฌ์†Œ์Šค ๊ณต์œ (Resource Sharing)์˜ ์•ฝ์ž

์„œ๋กœ ๋‹ค๋ฅธ Origin์„ ๊ฐ–๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ค€์ˆ˜ํ•ด์•ผ ํ•  ๊ทœ์•ฝ๋“ค์„ CORS Policy ๋ผ๊ณ  ํ•จ

ํด๋ผ์ด์–ธํŠธ (๋ฆฌ์†Œ์Šค ์š”์ฒญ์ž)

  1. ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ (OPTIONS) ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ, ํ—ค๋” ์ •๋ณด ํ™•์ธ

    • Simple Request ์ธ ๊ฒฝ์šฐ์—๋Š” ์ƒ๋žต๋จ

    • ์•„๋ž˜๋Š” ์ด OPTIONS ์š”์ฒญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”๋“ค

      • Access-Control-Request-Method

        • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”์†Œ๋“œ์ธ์ง€๋ฅผ ์‘๋‹ต๋ฐ›๊ธฐ ์œ„ํ•œ ํ—ค๋”

      • Access-Control-Request-Headers

        • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ—ค๋”์ธ์ง€๋ฅผ ์‘๋‹ต๋ฐ›๊ธฐ ์œ„ํ•œ ํ—ค๋”

  2. ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ ์š”์ฒญ ์ „๋‹ฌ

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ์—๋Š” ์‹ค์ œ ์š”์ฒญ๋งŒ์„ ์ž‘์„ฑํ•˜๋ฉฐ, Fetch ๋“ฑ์˜ ์š”์ฒญ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ

์„œ๋ฒ„ (๋ฆฌ์†Œ์Šค ์ œ๊ณต์ž)

  • ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ(OPTION) ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ํ—ค๋”๋ฅผ ํ†ตํ•ด ์ง€์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ, ํ—ค๋” ์ •๋ณด ์ œ๊ณต

    • Allows ๋˜๋Š” Access-Control-Allow-Methods

    • Allow-Headers ๋˜๋Š” Access-Control-Allow-Headers

  • ํ—ˆ์šฉ๋œ ํด๋ผ์ด์–ธํŠธ์ธ์ง€ ๊ฒ€์ฆ

    • ํ—ˆ์šฉ๋œ ํ—ค๋”๋ผ๋ฉด Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต ์ œ๊ณต

    • ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ, ์‹ค์ œ ์š”์ฒญ ๋ชจ๋‘ ์ด ๊ณผ์ •(ํ—ค๋”)์ด ์š”๊ตฌ๋จ

์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ํ๋ฆ„

  1. ํด๋ผ์ด์–ธํŠธ โ€” ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ

    • Simple Request ์ธ ๊ฒฝ์šฐ์—๋Š” ์ƒ๋žต๋จ (์ค‘์š”ํ•˜๋ฏ€๋กœ ํ•œ ๋ฒˆ ๋” ๊ฐ•์กฐ)

  2. ์„œ๋ฒ„ โ€” ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต (์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฉ”์†Œ๋“œ, ํ—ค๋” ์ •๋ณด ํฌํ•จ)

  3. ํด๋ผ์ด์–ธํŠธ โ€” ์„œ๋ฒ„์˜ ์‘๋‹ต ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ

  4. ์„œ๋ฒ„ โ€” ์‹ค์ œ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต

์ธ์ฆ ์š”์ฒญ์ธ ๊ฒฝ์šฐ

  • ํด๋ผ์ด์–ธํŠธ โ€” withCredentials: true

    • ์ด๊ฑธ ํฌํ•จํ•ด์•ผ ํ—ค๋”์— ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋„ฃ์Œ

  • ์„œ๋ฒ„ โ€” Access-Control-Allow-Credentials: true

    • ๋ธŒ๋ผ์šฐ์ €๋Š” ์ธ์ฆ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ํ—ค๋”์— ์ด๊ฒŒ ์—†์œผ๋ฉด ํŒŒ๊ธฐ

    • ์„œ๋ฒ„์—์„œ ์ด ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๊ณ ์ž ํ•˜๋ฉด Allow-Origin ์€ ์™€์ผ๋“œ์นด๋“œ๋กœ ์„ค์ • ๋ถˆ๊ฐ€

์ฃผ์˜์‚ฌํ•ญ

  • CORS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์กฐ๊ฑด ์š”์ฒญ์— origin ์ •๋ณด๊ฐ€ ์žˆ์–ด์•ผ ํ—ˆ์šฉํ•ด์ค„ ์ˆ˜ ์žˆ์Œ

    • ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•œ ์˜ค๋ฆฌ์ง„์ด ํ—ˆ์šฉ๋œ ์˜ค๋ฆฌ์ง„์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹น์—ฐํ•จ

์ถœ์ฒ˜

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

Last updated