π’ 22/05/18 볡μ΅
MDN, https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
MDN, https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy
Evans Library, https://evan-moon.github.io/2020/05/21/about-cors/
벨λ‘νΌνΈμ ν¨κ»νλ λͺ¨λ 리μ‘νΈ, https://react.vlpt.us/redux-middleware/09-cors-and-proxy.html
μ°Έκ³ μ¬μ΄νΈμ λ΄μ©μ κ°μΈμ μΌλ‘ 볡μ΅νκΈ° νΈνλλ‘ μ¬κ΅¬μ±ν κΈμ λλ€.
μμΈν μ€λͺ μ μ°Έκ³ μ¬μ΄νΈλ₯Ό μ΄ν΄λ³΄μκΈ° λ°λλλ€.
CORSλ₯Ό μμ보기 μ μ SOP κ°λ λΆν° μ΄ν΄λ³΄κ² μ΅λλ€. SOPλ same-origin policyμ μ½μλ‘ λμΌ μΆμ² μ μ± μ λ»ν©λλ€. μλ² μ μ₯μμ κ°μ μΆμ²μ λν HTTP μμ²λ§μ νλ½νλ μ μ± μΌλ‘, μΉ μ΄ν리μΌμ΄μ μμ μ€μν 보μ λͺ¨λΈμ λλ€.
λμΌ μΆμ²λΌλ λ§μ ν΄λΌμ΄μΈνΈμ μλ²μ URLμ νλ‘ν μ½, νΈμ€νΈ, ν¬νΈκ° λͺ¨λ λμΌν΄μΌν¨μ μλ―Έν©λλ€.
λ³΄ν΅ μλ°μ€ν¬λ¦½νΈμ μν λ°μ΄ν° μ κ·Όμ μ ννλ©°, HTML νκ·Έλ₯Ό ν΅ν μ΄λ―Έμ§, CSS, Script μμ²μ μ νλμ§ μμ΅λλ€.νμ§λ§ μΉ μ΄ν리μΌμ΄μ
μ κ°λ°νλ€λ³΄λ©΄ μΈλΆ 리μμ€λ₯Ό μμ²ν΄μΌν μΌμ΄ λ§€μ° λ§κΈ° λλ¬Έμ, μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λμ¨ μ μ±
μ΄ CORSμ
λλ€.
Cross-Origin Resource Sharingμ μ½μλ‘ λ²μνλ©΄ κ΅μ°¨ μΆμ² 리μμ€ κ³΅μ μ μ± μ΄λ€. μΆμ²κ° λ€λ₯Έ κ³³μ μμμ μ κ·Όν μ μλλ‘ λΈλΌμ°μ μκ² κΆνμ λΆμ¬νλ μ μ± μ λλ€.
λ€μ΄λ²μμ μΉ΄μΉ΄μ€ μλ²μ μμμ λ°μμ€λ €λ©΄ SOPμ μν΄ μ νλ©λλ€. μ΄λ κ² λ€λ₯Έ μΆμ²μ 리μμ€λ₯Ό λΆλ¬μ€λ €λ©΄ κ·Έ μΆμ²μ μλ²μμ 리μμ€λ₯Ό μμ²νλ μΆμ²λ₯Ό νμ©νλ CORS μλ΅ ν€λλ₯Ό λ°ννλλ‘ μ€μ ν΄μΌν©λλ€.
CORSκ° λμνλ 3κ°μ§ μλ리μ€λ λ€μκ³Ό κ°μ΅λλ€.
π λ¨μ μμ²
π ν리νλΌμ΄νΈ(preflight) μμ²
π μΈμ¦μ 보(credentialed)λ₯Ό ν¬ν¨ν μμ²
λ¨μ μμ²μ ν΄λΌμ΄μΈνΈκ° μμ² ν€λμ Origin
(μΆμ²)μ λν μ 보λ₯Ό λ΄μ μμ²μ 보λ΄λ©΄, μλ²μμ Access-Control-Allow-Origin
ν€λμ μ κ·Όμ νμ©ν Origin
μ μ 보λ₯Ό λ΄μ μλ΅νκ³ , λΈλΌμ°μ κ° μμ²ν Origin
κ³Ό νμ©λ Origin
μ λΉκ΅λ₯Ό ν΅ν΄ μμ²ν μλ΅μ μ 곡νλ λ°©μμ
λλ€.
ν리νλΌμ΄νΈ μμ²μ μΌλ°μ μΌλ‘ μ°λ¦¬κ° μΉ μ΄ν리μΌμ΄μ μ κ°λ°ν λ μμ£Ό λ§μ£ΌμΉλ μλ리μ€μ λλ€. μ΄ μλ리μ€μ ν΄λΉνλ μν©μΌ λ λΈλΌμ°μ λ μμ²μ νλ²μ 보λ΄μ§ μκ³ μλΉ μμ²κ³Ό λ³Έ μμ²μΌλ‘ λλμ΄μ μλ²λ‘ μ μ‘ν©λλ€.
μ΄λ 보λ΄λ μλΉ μμ²μ ν리νλΌμ΄νΈλΌκ³ λΆλ₯΄λ©°, μ΄ μμ²μλ HTTP λ©μλ μ€ OPTIONS
λ©μλκ° μ¬μ©λ©λλ€. μλΉ μμ²μ μν μ λ³Έ μμ²μ 보λ΄κΈ° μ μ λΈλΌμ°μ μ€μ€λ‘ μ΄ μμ²μ 보λ΄λ κ²μ΄ μμ νμ§ νμΈνλ κ³Όμ μ
λλ€.
μλΉ μμ²μ λν μλ΅μΌλ‘ μλ²κ° μ΄λ€ κ²λ€μ νμ©νκ³ , κΈμ§νκ³ μλμ§μ λν μ 보λ₯Ό 보λ
λλ€. μ΄ν μμ μ΄ λ³΄λΈ μλΉ μμ²κ³Ό μλ²κ° μλ΅μ λ΄μμ€ νμ© μ μ±
μ λΉκ΅ν ν, μ΄ μμ²μ 보λ΄λ κ²μ΄ μμ νλ€κ³ νλ¨λλ©΄ λ³Έ μμ²μ 보λ
λλ€. μ΄ν μλ²κ° λ³Έ μμ²μ λν μλ΅μ νκ² λλ©΄ λΈλΌμ°μ λ μ΅μ’
μ μΌλ‘ μ΄ μλ΅ λ°μ΄ν°λ₯Ό μλ°μ€ν¬λ¦½νΈμκ² λ겨μ€λλ€.
μΈμ¦μ 보λ₯Ό ν¬ν¨ν μμ²μ μ’ λ 보μμ κ°ννκ³ μΆμ λ μ¬μ©νλ λ°©λ²μ
λλ€. κΈ°λ³Έμ μΌλ‘ λΈλΌμ°μ κ° μ 곡νλ λΉλκΈ° 리μμ€ μμ² APIλ λ³λμ μ΅μ
μμ΄ μΏ ν€ μ 보λ μΈμ¦κ³Ό κ΄λ ¨λ ν€λλ₯Ό ν¨λΆλ‘ μμ²μ λ΄μ§ μμ΅λλ€. μ΄λ μμ²μ μΈμ¦κ³Ό κ΄λ ¨λ μ 보λ₯Ό λ΄μ μ μκ² ν΄μ£Όλ μ΅μ
μ΄ credentials
μ΅μ
μ
λλ€.
μ΄ μ΅μ μλ 3κ°μ§ κ°μ μ¬μ©ν μ μμΌλ©°, λ€μκ³Ό κ°μ΅λλ€.
same-origin(κΈ°λ³Έκ°)
κ°μ μΆμ² κ° μμ²μλ§ μΈμ¦ μ 보λ₯Ό λ΄μ μ μμ΅λλ€.
include
λͺ¨λ μμ²μ μ 보λ₯Ό λ΄μ μ μμ΅λλ€.
omit
λͺ¨λ μμ²μ μΈμ¦ μ 보λ₯Ό λ΄μ§ μμ΅λλ€.
λ§μ½ μ°λ¦¬κ° same-origin
μ΄λ include
μ κ°μ μ΅μ
μ μ¬μ©νμ¬ λ¦¬μμ€ μμ²μ μΈμ¦ μ λ³΄κ° ν¬ν¨λλ€λ©΄, λΈλΌμ°μ λ λ€λ₯Έ μΆμ²μ 리μμ€λ₯Ό μμ²ν λ λ¨μν Access-Control-Allow-Origin
λ§ νμΈνλ κ²μ΄ μλλΌ λ κ°μ§ 쑰건μ λ κ²μ¬νκ² λ©λλ€.
π Access-Control-Allow-Origin
μλ *
λ₯Ό μ¬μ©ν μ μμΌλ©°, λͺ
μμ μΈ URLμ΄μ΄μΌ ν©λλ€.
π μλ΅ ν€λμλ λ°λμ Access-Control-Allow-Credentials: true
κ° μ‘΄μ¬ν΄μΌν©λλ€.