๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/Vue

Cross - Origin Resource Sharing (CORS)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 11. 20.

Cross - Origin Resource Sharing (CORS)

๊ฐœ์š”

โœ” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…(SOP)์— ์˜ํ•ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉ ์ œํ•œ

SOP(Same - Origin Policy)

โœ” ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…
โœ” ๋ถˆ๋Ÿฌ์˜จ ๋ฌธ์„œ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค์™€ ์‚ฌํ˜ธ ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๋ฐฉ์‹
โœ” ์ž ์žฌ์ ์œผ๋กœ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ค„์ธ๋‹ค.

Origin - ์ถœ์ฒ˜

โœ” URL์˜ Protocol, Host, Port๋ฅผ ๋ชจ๋‘ ํฌํ•จํžˆ์—ฌ ์ถœ์ฒ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์˜ˆ์‹œ

CORS - ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ 

โœ” ์ถ”๊ฐ€ HTTP Header๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํŠน์ • ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€ํ˜€์•Ÿ๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ

  • ์–ด๋–ค ์ถœ์ฒ˜์—์„œ ์ž์‹ ์˜ ์ปจํ…์ธ ๋ฅผ ๋ถˆ๋Ÿฌ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์„œ๋ฒ„์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

โœ” ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž์‹ ์˜ ์ถœ์ฒ˜์™€ ๋‹ค๋ฅผ ๋•Œ ๊ต์ฐจ ์ถœ์ฒ˜ HTTP ์š”์ฒญ์„ ์‹คํ–‰

  • ๋งŒ์•ฝ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋‹ค๋ฅธ ์ถœ์ฒ˜์ง€๋งŒ ์ ‘๊ทผํ•ด๋„ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ ค์•ผ ํ•จ

CORS policy: ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ์ •์ฑ…

โœ” CORS policy์— ์œ„๋ฐฐ๋˜๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Server์—์„œ ์‘๋‹ต์„ ์ฃผ๋”๋ผ๋„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฑฐ์ ˆ

โœ” ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ทธ ์ถœ์ฒ˜์—์„œ ์˜ฌ๋ฐ”๋ฅธ CORS header๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

CORS ์„ค์ • ๋ฐฉ๋ฒ•

โœ” CORS ํ‘œ์ค€์— ์˜ํ•ด ์ถ”๊ฐ€๋œ HTTP Response Header๋ฅผ ํ†ตํ•ด ํ†ต์ œ ๊ฐ€๋Šฅ
โœ” ex: Access-Control-Allow-Origin

  • ๋‹จ์ผ ์ถœ์ฒ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์ถœ์ฒ˜๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ์šฉ

django-cors-headers-library ์‚ฌ์šฉํ•˜๊ธฐ

โœ” ์‘๋‹ต์— CORS header๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โœ” ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ Django ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋ธŒ๋ผ์šฐ์ € ๋‚ด ์š”์ฒญ์„ ํ—ˆ์šฉ

  1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ‘ requirements.txt ์—…๋ฐ์ดํŠธ
$ pip install django-cors-headers

$ pip freeze > requirements.txt
  1. App์ถ”๊ฐ€ ๋ฐ MIDDLEWARE ์„ค์ •

โœ” CorsMiddleware๋Š” ๊ฐ€๋Šฅํ•œ CommonMiddleware๋ณด๋‹ค ๋จผ์ € ์ •์˜๋˜์–ด์•ผ ํ•œ๋‹ค.

  1. CORS_ALLOWD_ORIGINS์— ๊ต์ฐจ ์ถœ์ฒ˜ ์ž์› ๊ณต์œ ๋ฅผ ํ—ˆ์šฉํ•  Domain ๋“ฑ๋ก
# my_api/settings.py

# ํŠน์ • Origin๋งŒ ์„ ํƒ์ ์œผ๋กœ ํ—ˆ์šฉ
CORS_ALLOWED_ORIGINS = [
    'http://localhost:8080',
]
# my_api/settings.py

# ๋ชจ๋“  Origin ํ—ˆ์šฉ
CORS_ALLOWE_ALL_ORIGINS = True

โœ” ๋ชจ๋“  Origin์„ ํ—ˆ์šฉ

  1. ๊ฒฐ๊ณผ ํ™•์ธ

'โญ Personal_Study > Vue' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

DFR Auth System  (0) 2022.11.22
Vue with DRF  (0) 2022.11.21
Vue with DRF: Server & Client  (0) 2022.11.20
Article with Vue  (0) 2022.11.19
Navigation Guard  (0) 2022.11.19

๋Œ“๊ธ€