๐ web server์ ๊ธฐ์ด ๋ฐฑ์๋์ ์ํต์ ํ ์ ์๋๋ก ๋ฐฐ์ฐ๋ ๋ ์ด๋ค. ํ๋ถ์๋ ๋ฐฑ์๋๋ฅผ ๋ฐฐ์์ ํ๋ก ํธ์๋๋ฅผ ํ๋ค๊ฐ ๋ฐฑ์๋๋ฅผ ๋ดค์ ๋ ์กฐ๊ธ ๋จ๋ค๋ฅธ ๊ธฐ๋ถ์ด ๋ค์๋ค.
๐ ์ค๋ ํ์ตํ ๋ด์ฉ
SOP(Same-Origin Policy)
- ๋์ผ ์ถ์ฒ ์ ์ฑ
- ๊ฐ์ ์ถ์ฒ์ ๋ฆฌ์์ค๋ง ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ถ์ฒ: ํ๋กํ ์ฝ, ํธ์คํธ, ํฌํธ๋ฅผ ๋งํ๋ค. ์ด ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด ๋์ผํ ์ถ์ฒ๋ก ๋ณด์ง ์๋๋ค.
- ์ ์ฌ์ ์ผ๋ก ํด๋ก์ธ ์ ์๋ ๋ฌธ์๋ฅผ ๋ถ๋ฆฌํจ์์จ ๊ณต๊ฒฉ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ฌ์ค๋ค.
- ๊ฐ๋ฐ์ค์ธ ์น ์ฌ์ดํธ์์ ๋ค์ํ api ๋๋ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋๋ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ SOP์ ์ฑ
์ ์๋ฐ๋๋ค.
์ด๋ฅผ CORS๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
CORS(Cross-Origin Resource Sharing)
- ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์
- ์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ, ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋ค.
- CORS ์ค์ ์ ํตํด ์๋ฒ์ ์๋ต ํค๋์ 'Access-Control-Allow-Origin'์ ์์ฑํ๋ฉด ์ ๊ทผ ๊ถํ์ ์ป์ ์ ์๋ค.
- ๋์๋ฐฉ์
- ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ(Preflight Request)
- ์ค์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ , OPTIONS ๋ฉ์๋๋ก ์ฌ์ ์์ฒญ์ ๋ณด๋ด ํด๋น ์ถ์ฒ ๋ฆฌ์์ค์ ์ ๊ทผ ๊ถํ์ด ์๋์ง๋ถํฐ ํ์ธํ๋ ๊ฒ.
- CORS์ ๋๋น ๋์ด์์ง ์์ ์๋ฒ๋ฅผ ๋ณดํธํ ์ ์๋ค.
- ๋จ์ ์์ฒญ(Simple Request)
- ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ์๋ตํ๊ณ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ.
- GET, HEAD, POST ์์ฒญ ์ค ํ๋.
- Accept, Accept-Language, Content-Language, Content-Type ํค๋์ ๊ฐ๋ง ์๋์ผ๋ก ์ค์ ํ ์ ์๋ค.
- Content-Type: application/x-www-form-urlencoded, multipart/form-data, text/plain ๊ฐ๋ง ํ์ฉ.
- ์ธ์ฆ์ ๋ณด๋ฅผ ํฌํจํ ์์ฒญ(Credentialed Request)
- ์์ฒญ ํค๋์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ด์ ๋ณด๋ด๋ ์์ฒญ
- ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ(Preflight Request)
Node.js์์ CORS๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ
const http = require('http');
const server = http.createServer((request, response) => {
// ๋ชจ๋ ๋๋ฉ์ธ
response.setHeader("Access-Control-Allow-Origin", "*");
// ํน์ ๋๋ฉ์ธ
response.setHeader("Access-Control-Allow-Origin", "https://homile.tistory.com");
// ์ธ์ฆ ์ ๋ณด๋ฅผ ํฌํจํ ์์ฒญ์ ๋ฐ์ ๊ฒฝ์ฐ
response.setHeader("Access-Control-Allow-Credentials", "true");
})
๐ ์ถ๊ฐ๋ก ๊ณต๋ถํ ๋ด์ฉ
React
- CRUD ๊ตฌํํ๊ธฐ
- Styled Component
Express
- CORS ์ค์ ํ๊ธฐ
- JSON ์ค์ ํ๊ธฐ
- Routing
- Middleware
๐ ์ค๋ ๋๋ ์ & ๋ง์ ๊ฐ์ง
- ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ์ธ์ ๋ ํ๋ค๋ค...
- Spring์ผ๋ก ํ์ ๋์๋ ๋น์ทํ๋ ๊ฒ ๊ฐ๋ค.
- ์ด์ ์ด๊ฑธ๋ก fetchํด์ ๋ฐ์์์ผ ํ ๊ฒ ๊ฐ๋ค๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
'Daily > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
22.06.18_TIL (0) | 2022.06.20 |
---|---|
22.06.17_TIL (0) | 2022.06.17 |
22.06.15_TIL (0) | 2022.06.15 |
22.06.14_TIL (0) | 2022.06.14 |
22.06.13_TIL (0) | 2022.06.13 |