서버 컴퓨터에 파일저장하는 간단 RestAPI 서버 만들기 2

송민경's avatar
Aug 08, 2024
서버 컴퓨터에 파일저장하는 간단 RestAPI 서버 만들기 2

1. CORS (Cross-Origin Resource Sharing)

  • 웹 애플리케이션이 다른 도메인에서 리소스에 접근할 수 있도록 하는 메커니즘
  • 브라우저의 보안 정책으로 인해, 웹 페이지는 동일 출처 정책(Same-Origin Policy)에 따라 다른 도메인에서의 리소스 요청을 제한
  • 이러한 제한을 우회, 웹 애플리케이션이 다른 출처의 리소스에 접근할 수 있게 해 줌
 

CORS의 주요 개념

  • 출처 (Origin)
    • 프로토콜(http 또는 https), 도메인, 포트 번호를 포함
    • EX) http://example.com:8080https://example.com은 서로 다른 출처
  • 동일 출처 정책 (Same-Origin Policy)
    • 브라우저는 보안을 위해 기본적으로 다른 출처의 자원에 접근을 차단
    • 웹 페이지가 요청을 보내는 출처와 응답을 보내는 출처가 동일해야 함
  • CORS 요청
    • 브라우저가 다른 출처의 서버에 요청을 보낼 때 자동으로 발생
    • 서버는 이 요청을 처리, 브라우저는 응답을 받아서 리소스를 로드할 수 있음
 

CORS 요청의 두 가지 유형

  • 단순 요청 (Simple Requests)
    • GET, POST, HEAD 메서드만 사용
    • 특정 헤더(Accept, Accept-Language, Content-Language, Content-Type 등)만 포함
    • 이러한 요청은 별도의 CORS 사전 요청이 필요 없음
  • 사전 요청 (Preflight Requests):
    • PUT, DELETE, PATCH와 같은 메서드나 사용자 정의 헤더가 포함된 요청은 사전 요청(preflight request)이 필요
    • 이 사전 요청은 OPTIONS 메서드를 사용하여 서버가 실제 요청을 허용하는지 확인
    •  

CORS 헤더

  • 적절한 HTTP 헤더를 응답에 추가하여, 브라우저에게 요청을 허용할지 여부를 알려줌
    • Access-Control-Allow-Origin : 요청을 허용할 출처를 지정
    • Access-Control-Allow-Methods : 허용할 HTTP 메서드를 지정
    • Access-Control-Allow-Headers : 요청에서 허용할 헤더를 지정
    • Access-Control-Allow-Credentials : 자격 증명(쿠키, 인증 헤더 등)의 전송을 허용할지 여부를 지정
    • Access-Control-Expose-Headers : 클라이언트가 접근할 수 있는 응답 헤더를 지정
    •  
package com.example.simpe_restapi._core; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://localhost:8080") // 허용할 도메인 .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*"); } }
  • addCorsMappings(CorsRegistry registry) : CORS 설정을 추가
  • registry.addMapping("/**") : 모든 경로(/**)에 대해 적용
  • .allowedOrigins("http://localhost:8080") : 허용할 원본 도메인을 설정
    • 다른 도메인에서 오는 요청은 차단
  • .allowedMethods("GET", "POST", "PUT", "DELETE") : 허용할 HTTP 메서드를 설정
  • .allowedHeaders("*") : 허용할 HTTP 헤더를 설정
모든 헤더 허용
 
Share article

vosw1