μΉ κ°λ°μ νλ€ λ³΄λ©΄ λꡬλ ν λ²μ―€ λΆμμ κΈμ¨μ CORS μ€λ₯(Cross-Origin Resource Sharing Error)λ₯Ό λ§λκ² λ©λλ€. μ΄ μ€λ₯λ μ½λ© μ€μκ° μλλΌ, μ¬μ€μ μ¬μ©μμ 보μμ μ§ν€κΈ° μν μΉ λΈλΌμ°μ μ βμ°©ν λ°©μ΄ νλβμ λλ€.
μ΄ κΈμμλ CORS μ€λ₯κ° λ°μνλ μ΄μ μ μ리λ₯Ό μ΄λ³΄μ λλμ΄μ λ§μΆ° μ½κ², κ·Έλ¦¬κ³ λ³΄μ μΈ‘λ©΄μμ κΉμ΄ μκ² μ€λͺ ν΄ λ릴κ²μ.
CORSλ₯Ό μ΄ν΄νλ €λ©΄ λ¨Όμ μΉ λ³΄μμ κ°μ₯ κΈ°λ³Έμ΄ λλ κ·μΉμΈ λμΌ μΆμ² μ μ± (SOP)λΆν° μμμΌ ν©λλ€.
λΈλΌμ°μ λ μΉμ¬μ΄νΈμ μ£Όμ(URL)λ₯Ό λ€μ μΈ κ°μ§ μμλ‘ κ΅¬λΆν©λλ€. μ΄ μΈ κ°μ§κ° λͺ¨λ κ°μμΌ βλμΌ μΆμ²(Same-Origin)βλ‘ μΈμ λ©λλ€.
| κ΅¬μ± μμ | μμ |
| νλ‘ν μ½ | http: vs https: |
| λλ©μΈ (νΈμ€νΈ) | api.google.com vs www.google.com |
| ν¬νΈ λ²νΈ | 80 vs 3000 |
| URL A | URL B | λμΌ μΆμ² μ¬λΆ | μ΄μ |
https://a.com:443 | https://a.com:443 | β λμΌ | λͺ¨λ κ°μ |
https://a.com | http://a.com | β λ€λ¦ | νλ‘ν μ½ (https vs http) λ€λ¦ |
https://a.com:8080 | https://a.com | β λ€λ¦ | ν¬νΈ λ²νΈ (8080 vs 443 λλ μλ΅) λ€λ¦ |
SOPλ βλ€λ₯Έ μΆμ²μμ κ°μ Έμ¨ λ°μ΄ν°μλ ν¨λΆλ‘ μ κ·Όν μ μλ€βλ κ·μΉμ λλ€.
λ§μ½ SOPκ° μλ€λ©΄ μ΄λ€ μΌμ΄ μκΈΈκΉμ?
bank.com)μ λ‘κ·ΈμΈν μνμμ, λμμ μ
μ± μ¬μ΄νΈ(hacker.com)λ₯Ό μ΄μ΄λ΄
λλ€.hacker.comμ μλ μλ°μ€ν¬λ¦½νΈ μ½λκ° bank.comμΌλ‘ μμ²μ 보λ΄μ μ¬μ©μμ μΏ ν€λ λ―Όκ° μ 보λ₯Ό νμ³κ° μ μκ² λ©λλ€.SOPλ λ°λ‘ μ΄λ° μ μμ μΈ λ°μ΄ν° νμ·¨ νμλ₯Ό λΈλΌμ°μ λ 벨μμ μμ²μ μΌλ‘ μ°¨λ¨ν©λλ€.
SOPλ 보μμ μν΄ νλ₯νμ§λ§, νμ€μ μΌλ‘λ λ€λ₯Έ μΆμ² κ°μ λ°μ΄ν° ν΅μ μ΄ νμμ μ λλ€.
http://localhost:3000http://api.myapp.comμ΄ λ μΆμ²λ λͺ λ°±ν λ€λ¦ λλ€. μ΄λ CORSλ SOP μμΉμ μ μ§νλ©΄μλ, μλ²κ° λͺ μμ μΌλ‘ νμ©ν κ²½μ°μ νν΄ λ€λ₯Έ μΆμ²μ μμ²μ λ°μμ£Όλλ‘ νλ λ©μ»€λμ¦μ λλ€.
http://localhost:3000)κ° λ°±μλ(http://api.myapp.com)λ‘ λ°μ΄ν°λ₯Ό μμ²ν©λλ€.CORS λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄, API μλ²κ° μλ΅ ν€λμ λ€μ λ΄μ©μ λ°λμ ν¬ν¨μμΌμΌ ν©λλ€.
Access-Control-Allow-Origin: [νμ©ν μΆμ²] Access-Control-Allow-Origin: http://localhost:3000Access-Control-Allow-Origin: * (보μμ κΆμ₯λμ§ μμ)CORS ν΅μ μλ βμΌλ° μμ²β μΈμ 보μ κ°νλ₯Ό μν νΉλ³ν μ μ°¨κ° μμ΅λλ€. λ°λ‘ Preflight Request(μ¬μ μμ²)μ λλ€.
μΌλΆ HTTP λ©μλ(μ: PUT, DELETE)λ νΉμ 컀μ€ν
ν€λλ₯Ό μ¬μ©νλ μμ²μ μ μ¬μ μΌλ‘ μλ² λ°μ΄ν°λ₯Ό λ³κ²½νκ±°λ λ―Όκ°ν μ μμ΅λλ€. λΈλΌμ°μ λ μ΄ μμ²μ μ€μ λ‘ λ³΄λ΄κΈ° μ μ, βμ΄ μμ²μ 보λ΄λ λ κΉμ?βλΌκ³ μλ²μκ² λ¨Όμ λ¬Όμ΄λ΄
λλ€.
PUT μμ²)μ 보λ΄κΈ° μ§μ μ, λΈλΌμ°μ λ λ¨Όμ μλ²μ OPTIONS λ©μλλ‘ μμ²μ 보λ
λλ€. (μ΄κ²μ΄ Preflight Requestμ
λλ€.)OPTIONS μμ²μ λν μλ΅μΌλ‘ βμ΄λ° λ©μλμ μ΄λ° ν€λλ₯Ό κ°μ§ μμ²μ μ°λ¦¬ μλ²κ° λ°μμ€ μ μμ΄.β λΌλ μ 보λ₯Ό μλ΅ ν€λμ λ΄μ 보λ
λλ€.PUT μμ²μ μλ²μ μ μ‘ν©λλ€.| μλ²κ° μλ΅ν΄μΌ νλ ν€λ | μλ―Έ |
Access-Control-Allow-Origin | μ΄λ€ μΆμ²λ₯Ό νμ©ν κ²μΈκ°? |
Access-Control-Allow-Methods | GET, POST, PUT μ€ μ΄λ€ HTTP λ©μλλ₯Ό νμ©ν κ²μΈκ°? |
Access-Control-Allow-Headers | Content-Type, Authorization λ± μ΄λ€ ν€λλ₯Ό νμ©ν κ²μΈκ°? |
CORS μ€λ₯λ βνλ‘ νΈμλ μ½λκ° μλͺ»λμλ€βλ μλ―Έκ° μλλλ€.
CORS μ€λ₯λ βλ°±μλ μλ²κ° νλ‘ νΈμλ μΆμ²λ‘λΆν°μ μ κ·Όμ νμ©νκ² λ€λ λͺ μμ μΈ μ½μ(ν€λ μ€μ )μ λΈλΌμ°μ μκ² λ³΄λ΄μ§ μμλ€βλ μλ―Έμ λλ€.
λ‘컬 λ€νΈμν¬ νκ²½μ μ‘°κΈμ΄λΌλ λ€λ€λ³Έ μ¬λμ΄λΌλ©΄ ν λ²μ―€μ λ§μ£ΌμΉλ μ΅μν λ¨μ΄κ° μμ΅λλ€. λ°λ‘ NetBIOSμ NBTμ λλ€.…
μλ νμΈμ! νλ μΉ κ°λ°μμ λ°μ΄ν° κ΅νμ ν΅μ¬μΈ JSON(JavaScript Object Notation)μ λμ± κ°λ ₯νκ³ μμ μ μΌλ‘ λ§λ€μ΄μ£Όλ λꡬ,…
β ECMAScript 3(E3)λ 무μμΌκΉ ECMAScript 3λ 1999λ μ 곡μνλ μλ°μ€ν¬λ¦½νΈ νμ€μ΄λ€. μ§κΈ 보면 μ€λλ κΈ°μ κ°μ§λ§,…
CoffeeScriptλ νλ νλ‘ νΈμλ κ°λ° μνκ³μμ λ§€μ° μΈκΈ° μμλ μΈμ΄μκ³ , μ§κΈλ νΉμ νλ‘μ νΈλ λ κ±°μ μμ€ν , κ°κ²°ν…
νλμ μΈ νλ‘κ·Έλλ° νκ²½μμ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ μ¬μ ν μ ν리μΌμ΄μ μ μ±λ₯ μ νμ μΆ©λμ μΌμΌν€λ μ£Όμ μμΈ μ€…
(Critical Rendering Path, ν΅μ¬ λ λλ§ κ²½λ‘ μλ²½ μ΄ν΄) μΉ λΈλΌμ°μ μ μ£Όμλ₯Ό μ λ ₯νκ³ μν°λ₯Ό λλ₯΄λ μκ°,…