- 기간 10월 014일(금)~10월 21일(목)
- 스프링 cors
CORS란?
CORS는 Cross-Origin Resource Sharing의 약자로 직역하면 "교차 출처 리소스 공유" 이다.
좀 더 쉽게 말하면 동일한 출처가 아닌 다른 출처에서 데이터를 주고 받는 것을 허용하는 정책이다.
출처:https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
교차 출처 리소스 공유 (CORS) - HTTP | MDN
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라
developer.mozilla.org
Same Origin Policy(동일 출처 정책)
동일한 출처는 URL 중에서도 프로토콜, 도메인 주소, 포트 번호가 같은 것을 의미한다.
출처:https://ko.wikipedia.org/wiki/%EB%8F%99%EC%9D%BC-%EC%B6%9C%EC%B2%98_%EC%A0%95%EC%B1%85
동일-출처 정책 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 동일-출처 정책(영어: same-origin policy)는 웹 애플리케이션의 중요한 보안 모델이다. 동일-출처 정책은 주로 스크립트로부터의 데이터 접근에 적용된다. 즉, 일치
ko.wikipedia.org
같은 origin을 가진 경우에만 통신을 허용하여 웹 브라우저에서는 다른 origin을 가진 서버에 API를 호출할려고 하면 요청 자체를 막아버린다.
Simple Request (단순 요청)
단순 요청은 위의 예비 요청과는 달리 서버에 바로 본격적으로 요청을 시작한다.
그렇다면 미리 확인하지도 않고 어떻게 안전하게 리소스를 요청하는 것일까?
그 방법은 조금 까다로운 조건들을 거는 것이다.
1. Access-Control-Request-Method를 통해 요청할 때 메서드는 HTTP 메서드가 아닌 GET,HEAD,POST 중 하나여야 한다.
2. Access-Control-Request-Headers 통해 요청을 보낼 때 Accept Accept-Language,Content-Language, Content-TypeDPR, Downlink, Save-Data, Viewport-Width 중 하나여야 한다.
3. Content-Type을 사용할 경우 application/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나여야 한다.
스프링에서 Cors해결 방법
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter(){
UrlBasedCorsConfigurationSource source =new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);// 내서버가 응답을 할 떄 json을 자바스크립트에서 처리할 수 있게 할지를 설정하는 것
config.addAllowedOrigin("http://localhost:3000");//포트 ip의 응답을 허용하겠다.
config.addAllowedHeader("*");//모든 header의 응답을 허용하겠다.
config.addAllowedMethod("*");//모든 post,get,putmdelete,patch 요청울 허용하겠다.
config.addExposedHeader("*");
source.registerCorsConfiguration("/api/**",config);
return new CorsFilter(source);
}
}
클레스 하나 만들어주고 Security에 필터체인 등록을 해주면 아주 잘 실행이 된다!
배운것
백엔드에서 기능구현후 배포하를 하고 프론트에게 주소를 알려주었는데 데이터를 받아오는 도중 proxy오류가 떠서 코스에 대해서 찾아보았고, 예전에도 혼자서 프론트엔드랑 포트 다르게 연동했을때도 이런 오류가 있었기 때문에 무슨 이유인지 바로 알 수 있어서 오류해결방법을 찾는 것은 어렵지 않았다.
ec2에서 보안 규약에 포트 열어주고 해봤지만 프론트 쪽에서 데이터를 볼수 없어서 더 찾아본 결과, 예전에 코스 찾아서 프로젝트에 적용시킨 적이 있어 그걸 가져와 적용시키니 잘 데이터가 넘어가고 프론트쪽에서도 데이터를 잘 받았다.
아쉬운점/느낀점
지금은 프론트와 백앤드 끼리 협업을 하면서 프로젝트를 진행중이다. 처음 같이 협업을 하는 과정이라 어떻게 해야할지 처음에는 어려웠지만 지금은 프론트 분들과 소통을 하면서 안되는 곳을 같이 찾아보고 같이 해결해 나가고 있다.
'항해 99(9기) > 항해 일일' 카테고리의 다른 글
항해 99 36일차 (0) | 2022.10.25 |
---|---|
항해 99 35일차 (0) | 2022.10.24 |
항해 99 33일차 (0) | 2022.10.21 |
항해 99 32일차 (0) | 2022.10.20 |
항해 99 31일차 (0) | 2022.10.19 |