Cross - Origin Resource Sharing (CORS)
๊ฐ์
โ ๋ณด์์์ ์ด์ ๋ก ๋ธ๋ผ์ฐ์ ๋ ๋์ผ ์ถ์ฒ ์ ์ฑ (SOP)์ ์ํด ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์ํธ์์ฉ ์ ํ
SOP(Same - Origin Policy)
โ ๋์ผ ์ถ์ฒ ์ ์ฑ
โ ๋ถ๋ฌ์จ ๋ฌธ์๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์ถ์ฒ์์ ๊ฐ์ ธ์จ ๋ฆฌ์์ค์ ์ฌํธ ์์ฉํ๋ ๊ฒ์ ์ ํํ๋ ๋ณด์ ๋ฐฉ์
โ ์ ์ฌ์ ์ผ๋ก ํด๋ก์ธ ์ ์๋ ๋ฌธ์๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊ณต๊ฒฉ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ธ๋ค.
Origin - ์ถ์ฒ
![](https://blog.kakaocdn.net/dn/GwyMY/btrRd7fUdTm/8XksRvsyFqfax5mVBcpeC1/img.png)
โ URL์ Protocol, Host, Port๋ฅผ ๋ชจ๋ ํฌํจํ์ฌ ์ถ์ฒ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์์
![](https://blog.kakaocdn.net/dn/xveck/btrRfIUeqma/L48EtKCalmvTf4nDPEsjuk/img.png)
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 ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ๋ธ๋ผ์ฐ์ ๋ด ์์ฒญ์ ํ์ฉ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ฐ
requirements.txt
์ ๋ฐ์ดํธ
$ pip install django-cors-headers
$ pip freeze > requirements.txt
- App์ถ๊ฐ ๋ฐ MIDDLEWARE ์ค์
![](https://blog.kakaocdn.net/dn/btOfXo/btrRcHJhE6W/PdPheW9ErXLul2J1VaoQT1/img.png)
โ CorsMiddleware๋ ๊ฐ๋ฅํ CommonMiddleware๋ณด๋ค ๋จผ์ ์ ์๋์ด์ผ ํ๋ค.
- 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์ ํ์ฉ
- ๊ฒฐ๊ณผ ํ์ธ
![](https://blog.kakaocdn.net/dn/dBlR3F/btrRcEFMALp/1iB3pdrAAk3L0SSJU38mBK/img.png)
![](https://blog.kakaocdn.net/dn/bukfHy/btrRd5CndqS/5uvICdYNRbfZmta31CX0W0/img.png)
'โญ 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 |
๋๊ธ