브라우저에서는 보안적인 이유로 cross-origin HTTP요청들을 제한한다, 그래서 cross-origin 요청을 하려면 서버의 동의가 필요하게 된다. 서버가 OK하면 브라우저는 요청을 허락하고, OK하지 않으면 브라우저에서 거절한다.
이렇게 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS라 한다.
브라우저에서는 cross-origin 요청을 안전하게 할 수 있도록 하는 메커니즘이다.
cross-origin은 다음 중 한 가지라도 다른 경우를 말한다.
1. 프로토콜 -> http와 https의 프로토콜이 다르다.
2. 도메인 -> domain.com과 other-domain.com은 다르다.
3. 포트 번호 -> 7777포트와 3000포트는 다르다.
Warning !
Access to fetch at ‘https://myhompage.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
'https://myhomepage.com'에서 'https://localhost:3000' 출처로 가져올 수 있는 액세스가 CORS 정책에 의해 차단되었습니다. 요청된 리소스에 'Access-Control-Allow-Origin' 헤더가 없습니다. 불투명한 응답이 필요에 적합한 경우, 요청 모드를 'no-cors'로 설정하여 CORS가 비활성화된 리소스를 가져오십시오.
CORS에러가 났을 때의 메세지이다. 앞서 말한 CORS의 의미를 토대로 에러를 확인하면, 결국 서버의 허용이 필요하다는 것이다. 서버에서 Access-Control-Allow-Origin 헤더에 허용할 출처를 기재하여 클라이언트에게 응답하면 된다. 이건 프론트가 어떻게 하질 못한다...
그래도 해결해야겠다! 싶다면
Chrome에서는 CORS 문제를 해결하기 위한 확장 프로그램을 제공해준다.
본 링크에서 'Allow CORS: Access-Control-Allow-Origin' 크롬 확장 프로그램을을 설치 해준다. 그럼 localhost 환경에서 API 테스트 시, CORS 문제를 해결할 수 있다.
Proxy란 클라이언트와 서버 사이의 중계 대리점이라고 보면 된다. 즉, 프론트에서 직접 서버에 리소스를 요청했더니 서버에서 따로 설정을 안해줘서 CORS에러가 뜬다면, 모든 출처를 허용한 서버 대리점을 통해 요청하면 된다..
가장 정석적인 방법이다. 직접 서버에서 HTTP헤더 설정을 통해 출처를 허용하게 설정하는 것이다. 서버의 종류도 노드 서버, 스프링 서버, 아파치 버서 등 여러가지가 있으니, 이에 대한 각각의 해결 방법이 있다.
SEO는 '검색엔진 최적화(Search Engine Optimization)' 또는 '검색엔진 최적화 전문업체(Search Engine Optimizer)'의 약어이다. 비즈니스, 웹 사이트의 소유주들이 자신의 정보를 노출이 많이 되도록 최적화시키는 것이다. 검색 엔진은 웹 페이지의 콘텐츠를 살펴보고 판단하기 위해 크롤링하는 로봇인 웹 크롤러를 사용한다.