반응형
서론
VueJS에서 axios를 이용하여 api를 받아오려고 시도했는데 CORS 문제가 발생하여 해결 방법을 정리해보도록 한다.
소스
axios.post("http://localhost:9090/iamgeUpload", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
})
.then((res) => {
console.log("res.data :", res.data);
});
문제
Access to XMLHttpRequest at 'http://localhost:9090/iamgeUpload' from origin
'http://localhost:8080' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
POST http://localhost:9090/iamgeUpload net::ERR_FAILED 400
dispatchXhrRequest @ xhr.js?b50d:220
xhrAdapter @ xhr.js?b50d:16
dispatchRequest @ dispatchRequest.js?5270:58
request @ Axios.js?0a06:109
httpMethod @ Axios.js?0a06:144
wrap @ bind.js?1d2b:9
eval @ EditorTest2.vue?76b0:70
원인
브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한합니다. 그래서 cross-origin 요청을 하려면 서버의 동의가 필요합니다. 만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절합니다.
이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS(Cross-Origin Resource Sharing)라고 부릅니다.
반응형
해결 방법
1. vue.config.js 생성
vue 프로젝트 root 위치에 vue.config.js를 생성한다. 만약 존재한다면 해당 파일에 추가하면 된다.
2. devServer - proxy 추가
module.exports = {
devServer: {
proxy: 'http://localhost:9090'
}
};
저는 해당 프로젝트에 vuetify가 존재해서 추가하였고 없으신분은 하단 정보처럼 추가하면 됩니다. proxy 경로는 도메인만 적으시면 됩니다.
수정 소스
axios.post("/iamgeUpload", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
})
.then((res) => {
console.log("res.data :", res.data);
});
api 경로를 도메인을 제외한 경로로 호출하면 된다.
해결 테스트
정상으로 api가 호출되는것을 볼수 있다.
반응형
'vue.js > vue.js 기능' 카테고리의 다른 글
[VUE] router - history에 따른 scroll 제어를 위한 scrollBehavior 사용법 (0) | 2023.06.08 |
---|---|
[vue.js] e-commerce(쇼핑몰) 기반으로 만들어보는 router 정리 (0) | 2023.03.09 |
[vue.js] npm audit 을 확인하여 취약점 해결방법 (0) | 2022.07.12 |
[vue.js] object 데이터 빈값 체크하여 버튼 disabled 제어 (0) | 2022.07.05 |
[vue.js] select 사용법 및 총 정리(feat. method 호출 및 데이터 제어) (0) | 2022.06.19 |