SOP(Same Origin Policy) : ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํํ๋ ๋ณด์ ๋ฐฉ์
https: (ํ๋กํ ์ฝ)
//github.com(ํธ์คํธ)
:443(ํฌํธ)
/cheorhyeon?tab=repositories#example
์ถ์ฒ(origin)๋?
Protocol, Host, Port
๋ฅผ ํตํด ๊ฐ์ ์ถ์ฒ์ธ์ง ๋ค๋ฅธ ์ถ์ฒ์ธ์ง ํ๋จํ ์ ์๋ค.localhost์ 127.0.0.1์ ๋ธ๋ผ์ฐ์ ์์๋ ๋ค๋ฅด๊ฒ ์ธ์
์ SOP๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น? ๋ณด์์ ์ํจ
์ ๋ํ ์ฌ์ฉ์
- ํ์ด์ค๋ถ ์๋น์ค ๋ก๊ทธ์ธ ์ดํ ์ฌ์ฉ
(ํ์ด์ค๋ถ์์ ์ธ์ฆ ํ ํฐ์ ๋ฐ์์ด)- ํด์ปค : ํฅ๋ฏธ์ง์งํ ๋ด์ฉ๊ณผ ๋งํฌ๋ฅผ ๋ฉ์ผ์ ํตํด ๋ณด๋
- ๋งํฌ๋ฅผ ํด๋ฆญํ๋ http://hacker.ck๋ก ์ด๋๋จ
- ํด๋น ๋งํฌ๋
ํ์ด์ค๋ถ์ ๋๋ ๋ฐ๋ณด๋ค ๋ผ๋ ํฌ์คํธ ๊ฒ์ ํ๋ผ๋ ์ฝ๋ ๋ดํฌ
- http://hacker.ck์์ ์ ๋ํ ์ฌ์ฉ์์ ํ ํฐ์ ์ด์ฉํด ํ์ด์ค๋ถ์ ๋๋ ๋ฐ๋ณด๋ค ํฌ์คํธ ๊ฒ์
- origin์ด ๋ค๋ฆ
- ํด์ปค : http://hacjer.ck, ํ์ด์ค๋ถ : https://www.facebook.com/
- ์ฆ ๋ค๋ฅธ Origin -> Cross Origin ์ด๋ผ ํ๋จํ๊ณ ์์ฒญ์ ๋ฐ์๋ค์ฌ์ง์ง ์์
๋ง์ฝ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๊ฐ ํ์ํ๋ค๋ฉด? CORS ํ์!
CORS(Cross-Origin Resource Sharing)
๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผ
ํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์๋ ค์ฃผ๋ ์ฒด์
CORS ์ ๊ทผ์ ์ด ์๋๋ฆฌ์ค
ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ(Preflight Request) : ์ฌ์ ํ์ธ ์์
OPTIONS ๋ฉ์๋
๋ฅผ ํตํด ๋ค๋ฅธ ๋๋ฉ์ธ์ ๋ฆฌ์์ค์ ์์ฒญ์ด ๊ฐ๋ฅํ ์ง ํ์ธํ๋ ์์
์์ฒญ์ด ๊ฐ๋ฅํ๋ค๋ฉด ์ค์ ์์ฒญ(Actual Request)๋ฅผ ๋ณด๋ธ๋ค.
Preflight Request
- Origin : ์์ฒญ ์ถ์ฒ
- Access-Control-Request-Method : ์ค์ ์์ฒญ ๋ฉ์๋
- Access-Control-Request-Headers : ์ค์ ์์ฒญ์ ์ถ๊ฐ ํค๋
Preflight Response
- Access-Control-Allow-Origin : ์๋ฒ์ธก ํ๊ฐ ์ถ์ฒ
- Access-Control-Allow-Methods : ์๋ฒ ์ธก ํ๊ฐ ๋ฉ์๋
- Access-Control-Allow-Headers : ์๋ฒ ์ธก ํ๊ฐ ํค๋
- Access-Control-Max-Age : preflight ์๋ต ์บ์ ๊ธฐ๊ฐ
Preflight ์์ฒญ : ํ์ธ + ์ค์ ์์ฒญ
Preflight Response๊ฐ ๊ฐ์ ธ์ผ ํ๋ ํน์ง
๋จ์ ์์ฒญ(Simple Request) : ๋ฐ๋ก ๋ณธ ์์ฒญ์ ๋ ๋ฆฌ๋ฉด์ ๋ฐ๋ก CORS์ธ์ง ํ์ธ(์๋ ์กฐ๊ฑด ๋ชจ๋ ์ถฉ์กฑ)
์ Preflight๊ฐ ํ์ํ ๊น? CORS๋ฅผ ๋ชจ๋ฅด๋ ์๋ฒ๋ฅผ ์ํด์
@CrossOrigin
์ด๋
ธํ
์ด์