๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ Computer Science/Network

[Network] CORS๋ž€? (feat. ๋ณด์•ˆ,HTTP) (What is a CORS?)

by Fomagran ๐Ÿ’ป 2022. 4. 27.
728x90
๋ฐ˜์‘ํ˜•

CORS๋ž€?

 

CORS๋Š” Cross-Origin Resource Sharing์˜ ์•ฝ์ž๋กœ ์ง์—ญํ•˜๋ฉด "๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ " ์ด๋‹ค.

 

์ข€ ๋” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋™์ผํ•œ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๋Š” ์ •์ฑ…์ด๋‹ค.

 

์ถœ์ฒ˜:https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์ •์ฑ…์ด ์™œ ํ•„์š”ํ•œ ๊ฒƒ์ผ๊นŒ?

 

๊ทธ๊ฑด ๋จผ์ € "๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…"์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•œ๋‹ค.


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

 

๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋™์ผํ•œ ์ถœ์ฒ˜์—์„œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋„๋ก ํ•˜๋Š” ์ •์ฑ…์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด "์ถœ์ฒ˜"๋Š” ๋„๋Œ€์ฒด ๋ฌด์—‡์ผ๊นŒ?

 

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด URL ์ฃผ์†Œ์ด๋‹ค. (๋จผ์ € URL์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์„ ์—ฌ๊ธฐ ์—์„œ ๋จผ์ € ์ฝ๊ณ  ์˜ค๊ธธ ๋ฐ”๋ž€๋‹ค.)

 

ํ•˜์ง€๋งŒ "๋™์ผํ•œ ์ถœ์ฒ˜"๋Š” ์ •ํ™•ํžˆ ๋˜‘๊ฐ™์€ URL์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์„ ์•„๋‹ˆ๋‹ค.

 

๋™์ผํ•œ ์ถœ์ฒ˜๋Š” URL ์ค‘์—์„œ๋„ ํ”„๋กœํ† ์ฝœ, ๋„๋ฉ”์ธ ์ฃผ์†Œ, ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์ถœ์ฒ˜:https://ko.wikipedia.org/wiki/%EB%8F%99%EC%9D%BC-%EC%B6%9C%EC%B2%98_%EC%A0%95%EC%B1%85


CORS

 

๋‹ค์‹œ CORS๋กœ ๋Œ์•„์™€์„œ ์ด๋Ÿฌํ•œ ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ž˜๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์ด ์ œํ•œ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์€ ํ•„์ˆ˜ ์š”์†Œ๊ฐ€ ๋˜์—ˆ๊ณ , ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์ •์ฑ…์ด ๋ฐ”๋กœ CORS(๊ต์ฐจ ์ถœ์ฒ˜ ์ž์› ๊ณต์œ )์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด CORS๋Š” ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฅธ ์ถœ์ฒ˜์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

๋ฐ”๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ๋‹จ์ˆœ ์š”์ฒญ ๋ฐฉ๋ฒ•๊ณผ ์˜ˆ๋น„ ์š”์ฒญ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.


Header

 

์š”์ฒญ ๋ฐฉ๋ฒ•์€ ์š”์ฒญํ•˜๋Š” ํ—ค๋”์™€ ์‘๋‹ตํ•˜๋Š” ํ—ค๋”๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฃจ์–ด ์ง„๋‹ค.

 

์š”์ฒญ ํ—ค๋”

 

1. Access-Control-Request-Method

 

์š”์ฒญ์„ ํ•  ๋•Œ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

2. Access-Control-Request-Headers

 

์š”์ฒญ์„ ํ•  ๋•Œ ์–ด๋–ค ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์‘๋‹ต ํ—ค๋”

 

1. Access-Control-Allow-Origin

 

๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

2. Access-Control-Expose-Headers

 

๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋“ค์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

3. Access-Control-Max-Age

 

์บ์‹ฑ๋˜๋Š” ์‹œ๊ฐ„์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

4. Access-Control-Allow-Credentials

 

ํฌ๋ ˆ๋ด์…œ์ด true์ผ ๋•Œ ์š”์ฒญํ• ์ง€์— ๋Œ€ํ•œ ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

5. Access-Control-Allow-Methods

 

ํ—ˆ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

6. Access-Control-Allow-Headers

 

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ํ—ค๋”๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์ด์ œ ํ—ค๋”์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด์•˜์œผ๋‹ˆ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์š”์ฒญ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜์ž.


Preflight Request (์˜ˆ๋น„ ์š”์ฒญ)

 

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

 

์•„๋ž˜์™€ ๊ฐ™์ด ์˜ˆ๋น„ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต๋ฐ›๊ฒŒ ๋œ๋‹ค.

 

 

 

์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜๋ฉด ํ—ค๋”์— Access-Control-Request-Method๋ฅผ ํ†ตํ•ด ์š”์ฒญํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ GET,POST,PUT,DELETE ์ค‘ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ์™€ Access-Control-Request-Headers๋ฅผ ํ†ตํ•ด OPTIONS๋ผ๋Š” ํ—ค๋”๋ฅผ ๋„ฃ๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

 

์ด ๋•Œ ์˜ˆ๋น„๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋””์— ์•„๋ฌด๊ฒƒ๋„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ํ—ค๋”๋งŒ ๋ณด๋‚ธ๋‹ค,

 

ํ•ด๋‹น ๋ฉ”์„œ๋“œ์™€ ํ—ค๋”๊ฐ€ ์œ ํšจํ•˜๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ์‘๋‹ต ํ—ค๋”๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€(Access-Control-Allow-Origin), ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋ฆฌ์ŠคํŠธ(Access-Control-Expose-Headers), ์บ์‹ฑ ๋˜๋Š” ์‹œ๊ฐ„(Access-Control-Max-Age) ๋“ฑ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.


Simple Request (๋‹จ์ˆœ ์š”์ฒญ)

 

๋‹จ์ˆœ ์š”์ฒญ์€ ์œ„์˜ ์˜ˆ๋น„ ์š”์ฒญ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์„œ๋ฒ„์— ๋ฐ”๋กœ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์š”์ฒญ์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฏธ๋ฆฌ ํ™•์ธํ•˜์ง€๋„ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

๊ทธ ๋ฐฉ๋ฒ•์€ ์กฐ๊ธˆ ๊นŒ๋‹ค๋กœ์šด ์กฐ๊ฑด๋“ค์„ ๊ฑฐ๋Š” ๊ฒƒ์ด๋‹ค.

 

1. Access-Control-Request-Method๋ฅผ ํ†ตํ•ด ์š”์ฒญํ•  ๋•Œ ๋ฉ”์„œ๋“œ๋Š” HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹Œ GET,HEAD,POST ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

 

2. Access-Control-Request-Headers ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ Accept  Accept-Language,Content-Language, Content-TypeDPR, Downlink, Save-Data, Viewport-Width ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

 

3. Content-Type์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ application/x-www-form-urlencoded, multipart/form-data, text/plain ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๊นŒ๋‹ค๋กœ์šด ์กฐ๊ฑด์„ ๊ฑธ๊ณ  ํ•ด๋‹น ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋‹ค๋ฉด ์•ˆ์ „ํ•œ ์š”์ฒญ์ด๋ผ ์ธ์‹ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•˜๋Š” ํ˜•์‹์ด๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€