์ฝ๊ฒ ๋งํด ๋ฐ์ดํฐ ์์ฒญ์ ์ ํ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค
CORS(Cross Origin Resource Sharing)์ ๊ธฐ๋ฅ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์์ ์ด๋ ํ ์์ฒญ์์ ์ํด ํ์ฉํ๋์ง์ ๋ํ ๊ธฐ์ค์ ์ํด ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ํ ์ง ์์ฒญ์ ํ์ง ์์์ง์ ๋ํ ๋ฉ์ปค๋์ฆ
ย
์ ๊ตณ์ด ๋ถํธํ๊ฒ ์ ์ฝ์ ๋๋๊ฐ?
๋ธ๋ผ์ฐ์ ์์๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ผ๋๊ฒ์ ๋๋ถ๋ถ ์ ๊ณตํ๊ณ ์๋ค
์ฌ๊ธฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ค ์๋ฒ๋ก ์ด๋ค ์์ฒญ์ ๋ณด๋๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ํ์
ํ ์ ์๋ค
๊ฐ๋ น ๋ด ๋ธ๋ก๊ทธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณธ๋ค๋ฉด
์์ฒญํ URL,Method,Payload ๋ฑ์ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ณด์ธ๋ค
์ด๊ฑธ ์ด์ฉํด์ ๋๊ฐ์ด ์์ฒญํ๋ฉด?
๋ด ๋ธ๋ก๊ทธ์ ๋๊ฐ์ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์ฌ์ ์๊ฒ ๋๊ฑฐ๊ณ https://juny-biog.vercel.app์ ๊ฐ์ด blog์ l ๋ถ๋ถ์ i๋ก ๋ฐ๊พผ ๋๋ฉ์ธ์ ๋ง๋ค๊ณ ๋ด ์ฌ์ดํธ๋ฅผ ์๋กญ๊ฒ ๋ง๋ค์ ์์๊ฒ์ด๋ค
์ฆ! juny-blog๊ฐ ์์ฒญ์ ํ์๋๋ง ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ฒ๋ ํ๋๊ฒ์ด์ง juny-biog๊ฐ ์์ฒญ์ ํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ๊ฑฐ์ ํ๊ฒ๋ ํ๋๊ฒ์ด๋ค
Cors ๋ฉ์ปค๋์ฆ์ด ์๊ธฐ๊ธฐ์ ์๋ ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋ฑ ๊ธ์ต์ฌ์ดํธ๋ฅผ ๋ณต์ ํด์ ์ด๋ฐ ์ฌ๊ธฐ๋ฅผ ๋ง์ด์ณค๋ ์ฌ๋ก๋ค์ด ์์๋ค
ย
CORS์ ์ ์ฝ
CORS์ ์ ์ฝ์ ๋๋ฉ์ธ ์ธ์๋ ์กด์ฌํ๋ค
- ๋๋ฉ์ธ์ด ๋ค๋ฅผ๊ฒฝ์ฐ
- ํฌํธ๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ โ 8080 , 9090
- ํ๋กํ ์ฝ์ด ๋ค๋ฅผ๊ฒฝ์ฐ โ http , https
์ฆ URL์์ 3๊ฐ์ ์์์ด๋ค protocol, domain, port
์๋ง Origin ์ด๋ผ๋ ๋ป์ ์ 3๊ฐ๋ฅผ ํฉ์น๋ง ์ธ๊ฒ ๊ฐ๋ค
mdn์ ๊ฒ์ํด๋ณด๋๊น origin ย ์ด๋ผ๋ ํ๋กํผํฐ๋ url์ผ ๊ฒฝ์ฐ 3๊ฐ์ ์์๋ฅผ ํฉ์น ๋ฌธ์์ด์ ๋ฆฌํดํ๊ธฐ๋ํ๊ณ .. ๊ทธ๋ฅ ๋ด ์๊ฐ
CORS๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ
์๋ฒ์์ ๋์๋ฅผ ํ๋ ์ํ๋์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ๊ฑฐ์ ํ ์๋ ์๋ค๊ณ ํ๋ค
์๋ฒ์์ cors๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋ ํ๋ฉด ๊ทธ๊ฑด ์๋ฒ๋ง๋ค ์ค์ ์ด ๋ค๋ฅด๊ธฐ์ ๋ค ์ฐพ์๋ด์ผํ๋ค..
๋ด๊ฐ ์ธ๋๋ง๋ค ์ฌ๊ธฐ๋ค๊ฐ ์ ์ด๋์ผ๋ ค๊ณ ํ๋ค
node.js & express
๋
ธ๋๋ cors๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ค์นํด์ผ ํ๋ค
$ npm i cors
import * as cors from 'cors'; import * as app from 'express'; // ๋ชจ๋ ์์ฒญ์ ํ์ฉํ ๋ app.use(cors()) // juny-blog.vercel.app ๋ง ํ์ฉํ ๋ app.use(cors( 'origin' : 'https://juny-blog.vercel.app', 'credentials' : true ))
origin ํค ๊ฐ์๋ค๊ฐ () => bool , new Error ๋ก ๋ณต์๊ฐ์ corsํ์ฉ ๋๋ ์์ธ ๋ฌธ๊ตฌ๋ ํ ์ ์์ผ๋
https://www.npmjs.com/package/cors
์์ธํ๊ฑด ์์ url ์ฐธ์กฐ
ย
์ด์ด์ ๋ณด์ถฉํ ๋ด์ฉโฆ
์์ฒญ๊ณผ ์๋ต Headers์ ํ์ฉ๊ด๋ จ header๊ฐ ๋ง์๋๋ฐ ํ๋ฒ ๋ค ์ดํด์ ์ ๋ฆฌํ๊ธฐโฆ