CORS(Cross-Origin Resource Sharing)
Mention : SOP?π CORS?π ββοΈ
SOP (Same Origin Policy)
- λ€λ₯Έ μΆμ²μ 리μμ€λ₯Ό μ¬μ©νλ κ²μ μ ν νλ 보μ λ°©μ
-
μΆμ²(origin) λ?
- Parameters β Query String, Anchor β Fragment
- URLμ Protocol, Host, Port λ₯Ό ν΅ν΄ μΆμ²λ₯Ό νλ¨ν μ μλ€ (μΈκ°μ§κ° κ°μμΌ SOP)
- Domain Name β λΈλΌμ°μ λ String valueλ‘ κ°μμ§ νλ¨νλ€.
- μ SOPλ₯Ό μ¬μ©ν΄μΌ νλ?
- μ μ½μ΄ μλ€λ©΄, ν΄μ»€κ° CSRF(Cross-Site Request Forgery) λ XSS(Cross-Site Scripting) λ±μ λ°©λ²μ μ΄μ©ν΄μ μ°λ¦¬κ° λ§λ μ΄ν리μΌμ΄μ μμ ν΄μ»€κ° μ¬μ΄λμ μ½λλ₯Ό μ€ννμ¬ κ°μΈ μ 보λ₯Ό κ°λ‘ μ± μ μλ€.
- λ€λ₯Έ μΆμ²μ 리μμ€κ° νμνλ€λ©΄?
- CORS
- CORS?
- Cross-Origin Resource Sharing
- λ€λ₯Έ μΆμ²μ μμμ 곡μ
κ΅μ°¨ μΆμ² 리μμ€ κ³΅μ (CORS)λ μΆκ° HTTP ν€λλ₯Ό μ¬μ©νμ¬, ν μΆμ²μμ μ€νμ€μΈ μΉ μ ν리μΌμ΄μ μ΄ λ€λ₯Έ μΆμ²μ μ νν μμμ μ κ·Όν μ μλ κΆνμ λΆμ¬νλλ‘ λΈλΌμ°μ μ μλ €μ£Όλ 체μ μ΄λ€. -MOZILLA-
- CORS μ κ·Ό μ μ΄ μλ리μ€
-
λ¨μ μμ² (Simple Request)
- Preflight μμ² μμ΄ λ°λ‘ μμ²μ λ λ¦°λ€.
- λ€μ 쑰건μ λͺ¨λ λ§μ‘±ν΄μΌ νλ€.
- GET, POST, HEAD λ©μλ
- Content-Type
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
- ν€λλ Accept, Accept-Language, Content-Language, Content-Type λ§ νμ©λλ€.
- ν리 νλΌμ΄νΈ μμ² (Preflight Request)
- μ¬μ νμΈ μμ
- OPTIONS λ©μλλ₯Ό ν΅ν΄ λ€λ₯Έ λλ©μΈμ 리μμ€μ μμ²μ΄ κ°λ₯ν μ§ νμΈ
-
μμ²μ΄ κ°λ₯νλ€λ©΄ μ€μ μμ² (Actual Request)μ 보λΈλ€.
![https://miro.medium.com/max/1400/1zCXcC1VkBB16BDXUxkWoew.png](https://miro.medium.com/max/1400/1zCXcC1VkBB16BDXUxkWoew.png)
- Preflight Request
- Origin : μμ² μΆμ²
- Access-Control-Request-Method : μ€μ μμ²μ λ©μλ
- Access-Control-Request-Headers : μ€μ μμ²μ μΆκ° ν€λ
- Preflight Response
- Access-Control-Allow-Origin : μλ² μΈ‘ νκ° μΆμ²
- Access-Control-Allow-Method : μλ² μΈ‘ νκ° λ©μλ
- Access-Control-Allow-Headers : μλ² μΈ‘ νκ° ν€λ
- Access-Control-Max-Age : Preflight μλ΅ μΊμ κΈ°κ°
- μλ΅ μ½λλ 200λμ¬μΌ νλ€.
- μλ΅ λ°λλ λΉμ΄μλ κ²μ΄ μ’λ€.
- μ Preflightκ° νμνκ°?
- corsλ₯Ό λͺ¨λ₯΄λ μλ²λ₯Ό μν΄μ μ¬μ κ²μ¦
- Preflight Request
- μΈμ¦μ 보 ν¬ν¨ μμ² (Credentialed Request)
- μΈμ¦ κ΄λ ¨ ν€λλ₯Ό ν¬ν¨ν λ μ¬μ©νλ μμ²μ΄λ€.
- ν΄λΌμ΄μΈνΈ μΈ‘ credentials : include
- μλ² μΈ‘ : Access-Control-Allow-Credintial : true (Access-Control-Allow-Origin: *μλλ€.)
- μΈμ¦ κ΄λ ¨ ν€λλ₯Ό ν¬ν¨ν λ μ¬μ©νλ μμ²μ΄λ€.
-
- CORS ν΄κ²°νκΈ°
- νλ‘ νΈ νλ‘μ μλ² μ€μ (κ°λ° νκ²½)
- νλ‘μ(Proxy)λ ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄μ μ€κ³ λ리μ
- cors proxy app (axios)
- μ§μ μλ²μμ ν€λμ μ€μ ν΄μ£ΌκΈ°
- μ§μ μλ²μμ HTTP ν€λ μ€μ (κ°μ₯ μ μμ μΈ ν΄κ²°μ± )
- μ€νλ§ λΆνΈ μ΄μ©νκΈ°
- νΉμ 컨νΈλ‘€λ¬μ μ μ© @CrossOrigin(origins = βhttp://localhost:8080β, allowCredentials = βtrueβ)
-
μ μμ μΌλ‘ μ€μ @Configuration
@Configuration public class CorsConfiguration implements WebMvcConfiguer { registry.addMapping("/api") .allowedOrigins("http://localhost:8081") }
- νλ‘ νΈ νλ‘μ μλ² μ€μ (κ°λ° νκ²½)
- Summary
- ν μΆμ²μ μλ μμμμ λ€λ₯Έ μΆμ²μ μλ μμμ μ κ·Όνλλ‘ νλ κ²μΌλ‘ κ΅μ°¨λλ μΆμ² μμλ€μ 곡μ μ λλ€. λ€λ₯Έ μΆμ²μ 리μμ€λ₯Ό κ°μ Έμ€λ μν©μμ SOPλ μ΄ μ κ·Όμ μ°¨λ¨ν©λλ€. νμ§λ§, CORS μ€μ μ ν΅νμ¬ Access-Control-Allow-Originμ μλ²μ μλ΅ν€λμ μμ±νκ² λλ©΄ μ κ·Ό κΆνμ μ»μ μ μμ΅λλ€.
Reference π
Leave a comment