๐ cors ๋?
Cross-origin resource sharing, ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ์ ์ฑ
- ๋ณด์์์ ์ด์ ๋ก ๋ธ๋ผ์ฐ์ ๋ค์ด ๋ค๋ฅธ ๋๋ฉ์ธ์ ์์ฒญ ๋ณด๋ด๋ ๊ฒ์ ์ ํํจ
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์์ ์ด์ ๋ก ์์ ์ ์ถ์ฒ์ ๋์ผํ ๋ฆฌ์์ค๋ง ๋ถ๋ฌ์ฌ ์ ์์
- ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ์ค๋ ค๋ฉด ๊ทธ ์ถ์ฒ์์ ์ฌ๋ฐ๋ฅธ cors ํค๋๋ฅผ ํฌํจํ ์๋ต์ ๋ฐํ
๐ ์ถ์ฒ๋ ๋ฌด์์ธ๊ฐ?
- ํฌํธ๋ฒํธ๋ ์๋ต๋์ด์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ํฌํธ๋ฒํธ๊น์ง ๋ชจ๋ ์ผ์นํด์ผ ๊ฐ์ ์ถ์ฒ๋ผ๊ณ ์ธ์ (ex.https://google.com:443)
- ๊ฐ์ ์ถ์ฒ ๊ท์น : SOP(Same-Origin Policy)
- ์น ํน์ฑ ์ ์ ๊ท์น์ ์งํค๊ธฐ ์ด๋ ต๋ค๋ฉด, cors(๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ )๋ผ๋ ์งํค์
๐ cors ์ ์ฑ
- ๋ธ๋ผ์ฐ์ ์์ ์๋, ์๋ฒ๋ cors๋ฅผ ์๋ฐํ๋๋ผ๋ ์ ์์ ์ผ๋ก ์๋ตํ๋ค
[๋์๊ณผ์ - ์๋ก ๋ค๋ฅธ ์ถ์ฒ๋ฅผ ๊ฐ์ง ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ณผ์ ]
1. ํด๋ผ์ด์ธํธ์์ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ http ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์์ฒญ
2. ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ ํค๋์ origin์ด๋ผ๋ ํ๋์ ์์ฒญ์ ๋ณด๋ด๋ ์ถ์ฒ๋ฅผ ๋ด์ ๋ณด๋
3. ์๋ฒ๊ฐ ์์ฒญ์ ์๋ตํ ๋ ์๋ตํค๋์ Access-Control-Allow-Origin ๊ฐ์ '๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ด ํ์ฉ๋ ์ถ์ฒ' ๋ฅผ ๋ด์์ ์๋ต
4. ๋ธ๋ผ์ฐ์ ๋ ์์ ์ด ๋ณด๋๋ ์์ฒญ์ origin๊ณผ ์๋ฒ๊ฐ ๋ณด๋ด์ค ์๋ต์ Access-Control-Allow-Origin์ ๋น๊ตํ ์ ํจ ์๋ต์ธ์ง ์๋์ง๋ฅผ ๊ฒฐ์
[๋์๋ฐฉ์1 - Preflight Request]
- ๊ฐ์ฅ ์ผ๋ฐ์
- ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ์๋น์์ฒญ(Preflight)๊ณผ ๋ณธ ์์ฒญ์ผ๋ก ๋๋์ด์ ์๋ฒ๋ก ๋ณด๋
- ์๋น ์์ฒญ์๋ OPTIONS ๋ฉ์๋๊ฐ ์ฌ์ฉ
- ์๋น ์์ฒญ์ผ๋ก ๋ณธ ์์ฒญ ์ ์ ๋ธ๋ผ์ฐ์ ์ค์ค๋ก ์๋น ์์ฒญ์ ์์ ์ฑ์ ํ์ธ
- ์๋น ์์ฒญ์์ ๋ธ๋ผ์ฐ์ ๋ Access-Control-Request-Headers๋ฅผ ์ฌ์ฉํด์ ๋ณธ ์์ฒญ์์ ์ฌ์ฉํ ํค๋(ex. content type)๋ฅผ ๋ฏธ๋ฆฌ ์๋ ค์ฃผ๊ฑฐ๋, Access-Control-Request-Method์์ ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ๋ฏธ๋ฆฌ ์๋ฒ์ ์๋ ค์ค
- ์๋ต ํค๋์ ์ ํจํ Access-Control-Allow-Origin์ด ์กด์ฌํด์ผ cors ์ ์ฑ ์ ์๋ฐ๋์ง ์๋ ๊ฒ, ์์ฒญ์ ์ฑ๊ณต ์ฌ๋ถ์ ๊ด๋ จ ์์
[๋์๋ฐฉ์2 - Simple Request]
- ์๋น์์ฒญ์ด ์์
- ๋จ, ์๋น์์ฒญ์ด ์๊ธฐ ์ํ ์กฐ๊ฑด์ด ์์(๊ณต์ mdn ์ฐธ๊ณ )
[๋์๋ฐฉ์3 - Credentialed Request]
- ์์ฒญ์ ์ธ์ฆ ๊ธฐ๋ฅ ์ถ๊ฐ
- ๋ค๋ฅธ ์ถ์ฒ ๊ฐ ํต์ ์์ ์ข ๋ ๋ณด์์ ๊ฐํํ๊ณ ์ถ์ ๋
- ๊ธฐ๋ณธ์ ์ธ ๋ธ๋ผ์ฐ์ ์ ๋น๋๊ธฐ ๋ฆฌ์์ค ์์ฒญAPI์ธ XMLHttpRequest๊ฐ์ฒด๋ fetch API๋ ๋ณ๋ ์ต์
์์ด ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค ์ ๋ณด๋ ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ํค๋๋ฅผ ํจ๋ถ๋ก ์์ฒญ์ ๋ด์ง ์์
- ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๊ฒ ํด์ฃผ๋ ์ต์
์ด credentials ์ต์
์ต์ ๊ฐ | ์ค๋ช |
same-origin(๋ํดํธ) | ๊ฐ์ ์ถ์ฒ ๊ฐ ์์ฒญ์๋ง ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์ |
include | ๋ชจ๋ ์์ฒญ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์ |
omit | ๋ชจ๋ ์์ฒญ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ด์ง ์์ |
- same-origin, include๋ฑ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด Access-Control-Allow-Origin ๋ฟ๋ง ์๋๋ผ ๋ ๋นก๋นกํ๊ฒ ์ธ์ฆ์ ํ์ธ
- ๋ธ๋ผ์ฐ์ ๋ ์ธ์ฆ๋ชจ๋๊ฐ include์ผ ๊ฒฝ์ฐ, ๋๊ฐ์ง ์กฐ๊ฑด์ด ๋ ๋นก๋นกํ๊ฒ ์ถ๊ฐ๋จ
- 1. Access-Control-Allow-Origin์๋ * ๋ฅผ ์ฌ์ฉํ ์ ์์, ๋ช ์์ ์ด URL ํ์
- 2. ์๋ต ํค๋์๋ ๋ฐ๋์ Access-Control-Allow-Credentials: true ๊ฐ ์กด์ฌํด์ผํจ
์ฐธ๊ณ
Evans Library, CORS๋ ์ ์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ฅผ ํ๋ค๊ฒ ํ๋๊ฑธ๊น?
'CS ๊ณต๋ถ - front' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ (0) | 2023.02.02 |
---|---|
[JS] ์ฝ๋ฐฑ ํจ์ (0) | 2023.02.02 |
[JS]๋ณ์ ์ ์ธ์ ์คํ ์์ ๊ณผ ๋ณ์ ํธ์ด์คํ (0) | 2023.01.31 |
[์น]์ฟ ํค, ์ธ์ , ๋ก์ปฌ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง ๊ทธ๋ฆฌ๊ณ JWT (0) | 2023.01.26 |
[์น] SSR vs CSR ๊ทธ๋ฆฌ๊ณ Next.js (0) | 2023.01.24 |