-
CORS 문제 해결개발/개발관련 2019. 11. 14. 12:13
1. cors 에러가 일어나는 원인
크롬, 파폭 등에서 보안상의 이유로 도메인이 다른 컨텐츠를 불러오면 차단하고 에러가 발생한다.
예를 들면, www.aa.com에서 이미지파일을 www.bb.com 에서 불러온다면 cors 에러가 발생한다.
요즘은 파일서버 따로, 스트리밍 서버 따로 등등 여러 url로 불러와야하기때문에 해결 방법이 여러가지 있다.
서버에 따라 다르다. 해당 문서는 window + jsp + Springmvc + 톰캣으로 되어있는 환경에서의 해결 방안이다.
2. 해결방안
1. 클라이언트 단에서 해결 방안 (완벽한 해결방안은 아니다.)
크롬 실행시 외부 요청 허용하는 크롬 자체 옵션 사용 - 모든 일반사용자가 이 옵션을 바꿔야하기 때문에 적절한 해결방안이 아니다.
외부요청을 가능하게 해주는 플러그인 설치 - 이것도 일반사용자가 할 수 없는 해결방안이다.
jsonp방식으로 요청 - 라이브러리를 사용하고 있다거나 다른 프레임워크, 기타 다른 이유에서 jsonp를 사용못할수있다.
2. 서버 단에서 해결 방안
인터넷에 찾아보면 여러가지 방법이 나와있다.
-> 자바로 헤더 추가 - 실패
-> config.xml 추가 - 실패
-> spring 홈피처럼 mvc:cors 추가 - 실패
-> html video 태그로 테스트 - 성공
-> panolens 자체 cors 옵션 추가 - 실패나는 a웹서버에서 b웹서버에 있는 동영상을 url로 불러오는 형식이었다.
그래서 위에는 a웹서버에서 적용했었는데 b웹서버에 똑같이 적용해보았다.
그중에 해결한 방안은 web.xml에 옵션 추가하는 방법이다.
<!-- cors Filter --> <filter> <filter-name>cors</filter-name> <filter-class>common.utils.SimpleCORSFilter</filter-class> </filter> <filter-mapping> <filter-name>cors</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
위와같이 web.xml에 추가해준다.
package common.utils; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; @Component public class SimpleCORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); response.setHeader("Access-Control-Allow-Origin", "*"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
java를 추가해주고 톰캣 내렸다 올리고 다시 확인해보면 에러없이 동영상이 잘 나온다!
보안상 모든 url을 허용하면 문제가 될 수 있으니, 내가 지정한 url만 허용할 수 있도록 url을 헤더에 세팅하는 것이 좋다.
나는 저 url이 언제 어떻게 바뀔지 몰라 테스트 중이기때문에 모든 url을 허용하도록 했다.
728x90'개발 > 개발관련' 카테고리의 다른 글
자바로 메일 보내기 (0) 2019.11.19 xss 공격 보안 (0) 2019.11.18 centos6 톰캣9설치 (0) 2019.10.25 리눅스에 mysql을 설치 및 연동 (0) 2019.10.23 지도 api (0) 2019.04.15