๐ CORS
1. JSONP์ CORS์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?โ
JSONP(JSON with Padding)์ CORS(๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ )๋ ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ๊ตฌํํ๋ ๋ ๊ฐ์ง ๊ธฐ์ ๋ก, ์น ํ์ด์ง๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ(์น์ฌ์ดํธ)์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์๊ฒ ํด์ค๋๋ค.
JSONPโ
JSONP๋ ์ด๊ธฐ์ ๋์ผ ์ถ์ฒ ์ ์ฑ
์ ํ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๋น๊ต์ ์ค๋๋ ๊ธฐ์ ๋ก, ์น ํ์ด์ง๊ฐ ๋ค๋ฅธ ์ถ์ฒ(๋๋ฉ์ธ, ํ๋กํ ์ฝ ๋๋ ํฌํธ)์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์๊ฒ ํฉ๋๋ค. <script> ํ๊ทธ์ ๋ก๋ฉ์ ๋์ผ ์ถ์ฒ ์ ์ฑ
์ ์ ํ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์, JSONP๋ ๋์ ์ผ๋ก <script> ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ URL์ ์ง์ ํ์ฌ ๋์ํฉ๋๋ค. ํด๋น URL์ ์๋ต์ ํจ์ ํธ์ถ๋ก ๊ฐ์ธ์ ธ ์์ผ๋ฉฐ, ์น ํ์ด์ง์ JavaScript์์ ์ด ํจ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค.
// client-side
function receiveData(jsonData) {
console.log(jsonData);
}
let script = document.createElement('script');
script.src = 'http://example.com/data?callback=receiveData';
document.body.appendChild(script);
// server-side
receiveData({ name: 'PittWu', type: 'player' });
๋จ์ ์ ๋ณด์ ์ํ์ด ๋๊ณ (์์์ JavaScript๋ฅผ ์คํํ ์ ์๊ธฐ ๋๋ฌธ) GET ์์ฒญ๋ง ์ง์ํ๋ค๋ ๊ฒ์ ๋๋ค.
CORSโ
CORS๋ JSONP๋ณด๋ค ๋ ์์ ํ๊ณ ํ๋์ ์ธ ๊ธฐ์ ์
๋๋ค. HTTP ํค๋ Access-Control-Allow-Origin์ ํตํด ๋ธ๋ผ์ฐ์ ์ ํด๋น ์์ฒญ์ด ํ์ฉ๋จ์ ์๋ ค์ค๋๋ค. ์๋ฒ์์ ๊ด๋ จ CORS ํค๋ ์ ๋ณด๋ฅผ ์ค์ ํ์ฌ ์ด๋ค ์ถ์ฒ๊ฐ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋์ง ๊ฒฐ์ ํฉ๋๋ค.
๋ง์ฝ http://client.com์ ํ๋ก ํธ์๋๊ฐ http://api.example.com์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๋ฉด, api.example.com์ ์๋ต์ ๋ค์ HTTP header๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค:
Access-Control-Allow-Origin: http://client.com
๋๋ ๋ชจ๋ ์ถ์ฒ๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ:
Access-Control-Allow-Origin: *
CORS๋ ๋ชจ๋ ์ ํ์ HTTP ์์ฒญ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ์ํํ๋ ํ์คํ๋๊ณ ์์ ํ ๋ฐฉ๋ฒ์ ๋๋ค.