SOP, COP
1. Same Origin Policy
1.1. Origin ํ๋จ
1.2. SOP๊ฐ ์๋ค๋ฉด?
1.3. SOP ์ ์ฉ
1.4. Preflight
1.5. CORS ๋์
SOP, COP
1. Same Origin Policy
document ๊ฐ์ฒด๋ ์ถ์ ์ธ origin์ ๊ฐ์ง๊ณ ์๊ณ , ์ด๋ js์์ `document.location.origin`์ผ๋ก ํ์ธํ ์ ์๋ค. document ๋ด์์ ๋ฆฌ์์ค๋ค๊ณผ ์ํธ์์ฉํ ๋, origin์ด ๋ค๋ฅด๋ค๋ฉด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ ์์ด์ ์ ํ์ ๋๊ฒ ๋ค๋ ๊ฒ์ด SOP(Same Origin Policy)์ด๋ค.
1.1. Origin ํ๋จ
Origin์ด ๊ฐ์ ์ง๋ Protocol, Host, Port๋ก ํ๋จํ๋๋ฐ url ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
http://localhost:3000
Protocol://Host:Port
์ธ ๊ฐ์ง๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉด ๊ฐ์ Origin์ด๋ผ๊ณ ํ๋จ๋๋ ๊ฒ์ด๋ค.
IE๋ ์์ชฝ ๋๋ฉ์ธ ๋ชจ๋ ๋์ ๋จ๊ณ์ ๋ณด์ ์์ค์ผ ๊ฒฝ์ฐ Same Origin Policy๊ฐ ์ ์ฉ๋์ง ์๊ณ , ํฌํธ๊ฐ ๋ค๋ฅด๋๋ผ๋ Same Origin์ผ๋ก ๊ฐ์ฃผ๋๋ค.
IE...ใ ใทใ ใท
1.2. SOP๊ฐ ์๋ค๋ฉด?
SOP๊ฐ ์๋ค๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์๊น?
์๋ฅผ ๋ค์ด Same origin์ด ์๋ ๋, ํด์ปค๊ฐ ์์ ์ ์๋ฒ url๋ก ์ ์ ๋ฅผ ์ ๋ํ๋ฉด ํด๋น document๊ฐ ์ ์ ์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ ํ ๋ฐ, document์ ํด๋น ์ ์ ์ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๊ธ์ด์ฌ ์ ์๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ๊ฐ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋๋ค.
1.3. SOP ์ ์ฉ
ํ์ง๋ง, ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ฌ์ดํธ์ ๋น๋์ค๋ฅผ ์ฝ์ ํ๊ธฐ๋ ํ๊ณ ๋ค๋ฅธ ์ฌ์ดํธ๋ก link๋ฅผ ๊ฑธ์ด ์ด๋ํ๊ธฐ๋ ํ๋ค. ์ด๋ฌํ ์ผ๋ค์ SOP์ ์ํฅ์ ์ ๋ฏธ์น๋ ๊ฒ์ผ๊น?
-
Cross Origin Writes
-
์ฐ๊ธฐ๋ ๋ณดํต ํ์ฉ๋๋ค. ์์์ ์ค๋ช ํ ๋งํฌ๋ redirect, form ์ ์ถ ๋ฑ์ ์์ด์ ์์ ๋กญ์ง๋ง ์ผ๋ถ ์ฌ์ด๋์์ preflight๋ฅผ ์์ฒญํ๊ธฐ๋ ํ๋ค.
-
preflight๋ ์ค์ request๋ฅผ ๋ณด๋ด๋ ๊ด์ฐฎ์์ง ํ๋จํ๊ธฐ ์ํด, option method๋ฅผ ์ด์ฉํ์ฌ ํ ์คํธ request๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
-
-
Cross Origin Inserts
- ์ฝ์ ์ ๋ณดํต ํ์ฉ๋๋ค. iframe์ด๋ video, img, embed ๋ฑ์ ํ๊ทธ๋ก ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ์ฝ์ ํ๋ค.
-
Cross Origin Read
- ์ฝ๊ธฐ๋ ๋ถํํ์ง๋ง CORS(Cross Origin Resource Sharing)๋ฅผ ์ด์ฉํด ์ ๊ทผ์ ํ์ฉํ ์ ์๋ค.
๊ฒฐ๊ตญ SOP๋ฅผ ๋ฐ๋ฅด๋ Web API๋ค์ ์ฌ์ฉํ๋ฉด, api ํธ์ถ ๋ฑ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ ๊ฐ์ origin์ด๊ฑฐ๋ ๋ค๋ฅธ origin์ผ ๊ฒฝ์ฐ cors ์ต์ ์ด ํ์ธ๋์ด์ผํ๋ค. ์ด๋ฌํ API๋ค์๋ Fetch API, XMLHttpRequest, axios ๋ฑ์ด ์๋ค.
Ajax(Asynchronous Javascript And Xml)
Ajax๋ js๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ํต์ ์ผ๋ก, ํด๋ผ์ด์ธํธ ์๋ฒ ๊ฐ์ xml(Extensible Markup Language)๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ ์ด๋ค. ์ ์ฒด ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
hini7.tistory.com
CORS๋ Cross-Origin Resource Sharing์ผ๋ก origin์ด ๋ค๋ฅธ ์ฌ์ดํธ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์ ์ฑ ์ด๋ค. SOP์์๋ ์๋ ๋ค๋ฅธ origin์ ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์๋๋ฐ, CORS๋ฅผ ์ค์ ํ๋ฉด ๊ฐ๋ฅํ๋ค.
1.4. Preflight
๋ค๋ฅธ origin์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋๋ ์๋ฒ ์ ์ฅ์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ณ , ๋ธ๋ผ์ฐ์ ์ ์ฅ์์๋ ์๋ฒ๊ฐ ์์ฒญ์ ์ ๋๋ก ๋ฐ์ ์ ์์ ์ ์์ผ๋ ์ ๋๋ก ๋ ๋์์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ ํ ์คํธ๋ฅผ ๋จผ์ ํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ํ ์คํ ๊ณผ์ ์ด ๋ฐ๋ก Preflight์ด๋ค.
๊ฐ๋ api ์์ฒญ ์ get method๋ง ์ ๋๋ก ๋์ํ๊ณ ๋ค๋ฅธ ๋ฉ์๋๋ 404 ์๋ฌ๊ฐ ๋ฐ ๋๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ Network๋ฅผ ์ดํด๋ณด๋ฉด ๋ด๊ฐ ์ง์ ํ method๊ฐ ์๋ OPTION method๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒ์ด ๋ณด์ธ๋ค.
์ด๋ Preflight๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์ฝ๊ฒ ์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ์์ฒญ์์ ์ฌ์ฉํ method๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ด๋ฉด ์๋ฒ๋ ํ์ฉํ๋ method๋ฅผ response๋ก ๋ณด๋ด์ ํด๋ผ์ด์ธํธ๊ฐ ํ ๋ค์ ์์ฒญ์ด ์ ํจํ ์ง์ ๋ํ ์๋ต์ ํด์ฃผ๋ ์์ด๋ค.
1.5. CORS ๋์
CORS(Cross-Origin Resource Sharing)๋ HTTP header๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋์ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค header๋ฅผ ์ถ๊ฐํด์ผํ ๊น?
์๋ฒ์์ ์ฌ์ฉํ๋ HTTP response header์ ์ต์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
-
Access-Control-Allow-Origin : ์ด๋ค origin์ data ์์ฒญ์ ํ์ฉํ ์ง
-
Access-Control-Expose-Headers : ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ฉํ๋ header ์ง์ ๊ฐ๋ฅ
-
Access-Control-Max-Age : preflight์ ์์ฒญ์ด ์ผ๋ง๋ ์ค๋ ์บ์๋๋์ง
-
Access-Control-Allow-Credentials : ์ธ์ฆ ์ ๋ณด ์ธํ ๊ฐ๋ฅ
-
Access-Control-Allow-Methods : ๊ฐ๋ฅํ ์์ฒญ method
-
Access-Control-Allow-Headers : ํ์ฉํ๋ header ์ง์ ๊ฐ๋ฅ
๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋ HTTP request header์ ์ต์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
-
origin
-
Access-Control-Request-Method : preflight์์ ์ค์ ์์ฒญ์ ์ด๋ค method๊ฐ ์ฐ์ผ ๊ฒ์ธ์ง ์๊ณ
- ์๋ฒ์์๋ Access-Control-Allow-Methods๋ก ๋ต๋ณํจ
-
Access-Control-Request-Headers : preflight์์ ์ค์ ์์ฒญ์ ์ด๋ค header๊ฐ ์ฐ์ผ ๊ฒ์ธ์ง ์๊ณ
- ์๋ฒ์์๋ Access-Control-Allow-Headers๋ก ๋ต๋ณํจ
๊ฒฐ๋ก ์ ์ผ๋ก same origin์ด ์๋ cross origin์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋, preflight๋ก ๋จผ์ ํ ์คํ ์ ํ๋ฉฐ ์๋ฒ์ ๋ธ๋ผ์ฐ์ ์์๋ ์์ ๊ฐ์ header๋ฅผ ํตํด ํด๋น origin์ ์์ฒญ์ด ์ฌ๋ฐ๋ฅด๊ณ ์ดํ๋ ์ ์๋์ง ์ํตํ๋ค.
Comment