CORS


๊ฐœ์š”.

์‹ค๋ฌด๋ฅผ ํ•˜๋ฉด์„œ CORS ๋ฌธ์ œ์— ๋ด‰์ฐฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 1๋…„์ „์— ์ž‘์„ฑํ•œ ๊ธ€์ด์ง€๋งŒ ๋‹ค์‹œ๊ธˆ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.


์„ ํ–‰ ์„ค๋ช….

  • XMLHttpRequest( ์ดํ•˜ XHR ) ๊ฐ์ฒด๋Š” ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ์ „์ฒด ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ฆฌ๋กœ๋“œ ์—†์ด ์š”์ฒญ URL ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ”ํžˆ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋น„๋™๊ธฐ ajax ๋ฐฉ์‹์—์„œ ์ฃผ๋กœ ์“ฐ์ธ๋‹ค.

  • XHR ์€ same-origin ์ •์ฑ…์„ ๋”ฐ๋ฅด๋Š”๋ฐ XHR ์€ ํ•ญ์ƒ ์ž์‹ ๊ณผ ๋™์ผํ•œ ๋„๋ฉ”์ธ์œผ๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค.

    • ์—ฌ๊ธฐ์„œ same-origin ์ •์ฑ…์ด๋ž€, another origin ์œผ๋กœ๋ถ€ํ„ฐ ๋ฌธ์„œ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๋ฌธ๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๋ฐฉ์‹์ด๋‹ค.

    • ๋”ฐ๋ผ์„œ  same-origin ์€ ์„ธ ๊ฐœ์˜ ๋‚ด์šฉ์„ ํŒ๋‹จํ•ด์„œ ๋™์ผํ•œ origin ์ธ์ง€ ์‹๋ณ„ํ•œ๋‹ค.

      • protocol

      • port

      • host

์„ค๋ช…
  • ์œ„์™€ ๊ฐ™์€ SOP (same-origin-policy) ๋Š” ๊ณผ๊ฑฐ์—๋Š” ๊ดœ์ฐฎ์•˜์ง€๋งŒ ์š”์ฆ˜ ๊ฐ™์ด api ํ˜ธ์ถœ์ด ์žฆ์•„์ง€๊ณ  ์™ธ๋ถ€ ๋„๋ฉ”์ธ ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ ๋ฐ ์„œ๋“œํŒŒํ‹ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งŽ์ด ์ƒ๊ฒจ๋‚˜๊ฐ€๋ฉด์„œ ์ด๋ฅผ ๊ทน๋ณตํ•  ํ•„์š”์„ฑ์„ ์žˆ์—ˆ๊ณ  ์ด์— ๋”ฐ๋ผ ๋‚˜์˜จ ๊ฒƒ์ด CORS (Cross-Origin-Resource-Sharing) ์ด๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” CORS ๋ฅผ ์œ„ํ•ด์„œ ์ƒˆ๋กœ์šด HTTP ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ํ—ค๋”๋ฅผ ํ™•์ธํ•ด์„œ ๋ฐ์ดํ„ฐ ์š”์ฒญ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

## Prefilight Request
๋ธŒ๋ผ์šฐ์ €๋Š” ์‹ค์ œ ์š”์ฒญ์„ ์ „์†กํ•˜๊ธฐ ์ „์— options ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ preflight ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค. preflight ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” CORS ๊ด€๋ จ ์ •๋ณด๋ฅผ ํ—ค๋”์— ๋‹ด์•„์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์‘๋‹ต์œผ๋กœ ์ „์†กํ•œ๋‹ค.

- Request Header
  • Access-Control-Request-Method
    • ์‹ค์ œ ์š”์ฒญ ๋•Œ ์‚ฌ์šฉํ•  ๋ฉ”์†Œ๋“œ
  • Access-Control-Request-Headers
    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ—ค๋”์— ์ถ”๊ฐ€ํ•  ์ปค์Šคํ…€ ์†์„ฑ
- Response Header
  • Access-Control-Allow-Origin : ํ—ˆ์šฉํ•˜๋Š” Origin
  • Access-Control-Request-Methods : ํ—ˆ์šฉํ•˜๋Š” ์š”์ฒญ ๋ฉ”์†Œ๋“œ
  • Access-Control-Allow-Headers : ํ—ˆ์šฉํ•˜๋Š” ํ—ค๋” ์†์„ฑ
  • Access-Control-Max-Age : prefilight request ์บ์‹œํ•˜๋Š” ์‹œ๊ฐ„ (์ดˆ๋‹จ์œ„)

## With Credentials
ํ‘œ์ค€ CORS ์š”์ฒญ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Non-Credential ์š”์ฒญ์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฟ ํ‚ค๋ฅผ ์š”์ฒญ์— ํฌํ•จํ•˜๊ณ  ์‹ถ๋‹ฅ๋ฉด XHR ๊ฐ์ฒด์— withCredentials ์†์„ฑ ๊ฐ’์„ true ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

- Response Header
  • Access-Control-Allow-Credentials : true (์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์„œ๋ฒ„ Response ํ—ค๋”์— ํฌํ•จ)


Posted by doubler
,