๐ŸŒฑ[WEB] CORS

์–‘ํ˜„์ •ยท2023๋…„ 12์›” 15์ผ
0

WEB

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

๐ŸšจCORS ์—๋Ÿฌ

Vue์™€ .NET ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ์„ ํ•˜๋˜ ์ค‘ CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. CORS ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CORS์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ๋“ค์„ ๊ณต์œ ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.


์šฐ์„  CORS์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „ SOP (Same Origin Policy) ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โœจSOP (Same Origin Policy)

๋‹ค๋ฅธ *์ถœ์ฒ˜์˜ resource ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ œํ•œ์„ ๋‘๋Š” ๋ณด์•ˆ ๋ฐฉ์‹
*์ถœ์ฒ˜: ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ, ํฌํŠธ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋™์ผ ์ถœ์ฒ˜

์ œํ•œํ•˜๋Š” ์ด์œ ?

๋งŒ์•ฝ ์€ํ–‰์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธํ•˜์—ฌ ์ธ์ฆํ† ํฐ์„ ๋ฐ›์€ ํ›„, ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ„๋‹ค๋ฉด ๊ทธ ํ† ํฐ์ด ์ฒจ๋ถ€๋˜์–ด ๋ณด๋‚ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ์ƒ์œผ๋กœ ๋งค์šฐ ์ข‹์ง€ ์•Š๊ฒ ์ฃ ? ๊ทธ๋ ‡๊ธฐ์— ๋‹ค๋ฅธ ์ถœ์ฒ˜๊ฐ„์˜ resource ์‚ฌ์šฉ์— ์ œํ•œ์„ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


์ตœ๊ทผ์—๋Š” ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ๊ณผ ๋ฐฑ ๊ฐœ๋ฐœ์˜ ๋ถ„๋ฆฌ๋กœ api๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ถœ์ฒ˜ ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ์š”! ์ด๋ฅผ ์œ„ํ•ด CORS๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โœจCORS (Cross-Origin Resource)

HTTP ํ—ค๋”๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ resouce ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ.

CORS ์š”์ฒญ์˜ ์ข…๋ฅ˜

  1. Simple Request
  2. Preflight Request
  3. Credntialed Request

1. Simple Request

๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด Simple Request๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1) GET, POSTT, HEAD
2) POST ๋ฐฉ์‹์ผ ๊ฒฝ์šฐ conte-type์ด ์•„๋ž˜ ์…‹ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•จ.

  • application/x-www-form-unlencoded
  • multipart/form-data
  • text/plain

3) Header๋Š” Accept, Accept-Language, Content-Language, Content-Type๋งŒ ์ ์šฉ

2. Preflight Request

[Preflight Request ๊ณผ์ •]

1) OPTIONS ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ resource์— ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ ์ž‘์—…
2) ์š”์ฒญ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์‹ค์ œ ์š”์ฒญ(Actual Request) ๋ณด๋‚ด๊ธฐ

3. Credentialed Request

์ธ์ฆ๊ด€๋ จ Header๋ฅผ ํฌํ•จํ•  ๋•Œ ์‚ฌ์šฉ

์„œ๋ฒ„

Access-Control-Allow-Credential : true
Access-Control-Allow-Origin : "http://localhost:8081"

๐Ÿšจ์ฃผ์˜
Access-Control-Allow-Origin : "*" ๋ฅผ ํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ผญ "http://localhost:8081" ์™€ ๊ฐ™์€ ์ •ํ™•ํ•œ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐ŸšจCORS ERROR ํ•ด๊ฒฐ

1. ํด๋ผ์ด์–ธํŠธ์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ

1) ์›น ๋ธŒ๋ผ์šฐ์ € ์‹คํ–‰ ์˜ต์…˜์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•œ SOP ํšŒํ”ผํ•˜๊ธฐ
- SOP๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž„์˜๋กœ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ SOP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฉ๋‹ˆ๋‹ค.

2) json ๋ฐฉ์‹์œผ๋กœ json ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด๋‚˜ css ํŒŒ์ผ์€ SOP์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ json ํ˜•์‹์œผ๋กœ ํŒŒ์‹ฑํ—ค ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ

.NET์„ ์ด์šฉํ•˜์—ฌ ํ—ˆ์šฉํ•  ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

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