Cross Origin Resource Sharing: cross origin에서 리소스(서버자원)을 요청하여 사용
같은 오리진(same origin)에서 요청하던 방식에서, 다른서버에서의 요청을 수용할 필요가 생김
초기에는 보안상의 이유로 브라우저들은 제한, 개발자들의 요청으로 앱의 고도화를 위하여 서버가 allow한 범위 내에서의 요청을 허용하게 됨
리소스에 접근하기 위한 권한을 요청하는 것이라고 보면 됨.
보안상의 이유도 있지만, 본인들의 API를 제한적으로 제공하기 위한 용도로 사용한다.
즉, 제한적인 리소스를 제한적으로 제공하기 위하여 사용한다.
origin(출처)는 스킴(http), 호스트(ex.com), 포트(:8080,:3005)를 기준으로 분류한다
https://developer.mozilla.org/ko/docs/Glossary/Origin
(예시)
const defaultCorsHeaders = {
'access-control-allow-origin': 'Sh+8',
'access-control-allow-method': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'content-type, accept',
'access-control-max-age': 10 // seconds.
};
(설명)
모든 도메인을 허용(Sh+8)(별표, 와일드카드라고 함)
메소드와 헤더는 적혀있는 것들만 허용함
preflight request는 10초까지 허용함(인증 유효기간이라고 보면 됨)
OPTIONS
서버에서 allow하는 조건들을 갖추고 있는지 실제 요청 전에 확인하는 요청(사전 확인 요청)
여기에서 거절을 당하면 실제 요청을 할 수 없다.
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// 여기서 body
에 전체 요청 바디가 문자열로 담겨있습니다.
});
response.end 는 각 요청에 한번만 들어가야함, 2번 이상이면 에러.
라우팅의 두가지 기준: method, url
디버깅: inspect