HTTP module 공식문서
Web Server란 HTTP 요청을 처리하고 응답을 보내주는 프로그램을 말한다.
HTTP 모듈을 사용하면 node.js 환경에서 HTTP 요청을 보내거나 응답을 받을 수 있게 해준다.
require("")
를 사용하여 http모듈을 불러올 수 있다.
createServer
를 사용하여 웹 서버 객체를 만든다.
const http = require('http');
const server = http.createServer();
server.on('request',(request, response) => {
// 여기서 작업이 진행된다.
});
// 상위 축약문법
const server = http.createServer((request, response) => {
// 여기서 작업이 진행된다.
});
포트와 ip를 지정하고 listen
메소드를 사용하면 서버를 실행할 수 있다.
const PORT = 5000;
const ip = 'localhost';
server.listen(PORT, ip);
HTTP 트랜잭션 해부 공식문서를 참고하며 스프린트를 진행했다.
server
라는 웹 서버 객체를 만들고, 서버를 실행하기 위해 포트와 ip를 지정한다.
const http = require('http');
const PORT = 5000;
const ip = 'localhost';
const server = http.createServer((req, res) => {
);
server.listen(PORT, ip, () => {
console.log(`http server listen on ${ip}:${PORT}`);
);
request
를 구조분해하여 method
와 url
을 분리한다.
굳이 분리하지 않아도 .을 활용해 불러올 수 있다.
const server = http.createServer((req, res) => {
const { method, url } = req;
);
요청에 대한 body
는 data
와 end
이벤트를 이벤트 리스너에 등록해서 데이터를 받아 올 수 있다.
data
이벤트에서 발생시킨 청크는 Buffer
이다. 따라서 data
이벤트에서 청크를 배열로 받아 end
이벤트에서 배열을 합친뒤 문자열로 바꿔준다.
let body = []
req.on('data', (chunk) => body.push(chunk))
.on('end', () = body = Buffer.concat(body).toString());
따라서 메소드가 POST
이고 url
이 upper
일때, body
를 대문자로 변경해주고 url
이 lower
이면 소문자로 변경해주면 된다.
cors를 허용하기 위해 Allow 범위를 지정해주어야 한다.
Cross Origin Resource Sharing의 약자로, cross origin에서 리소스를 요청하여 사용한다는 뜻이다. 즉, 다른 origin에서 다른 서버에 있는 리소스를 요청하여 사용한다는 뜻이다.
보안상의 이유로 브라우저에서는 스크립내에서 초기화되는 cross-origin HTTP 요청을 제한한다. 하지만 서버가 Allow 한 범위 내에서는 cross origin 요청을 허용한다.
Allow 범위를 defaultCorsHeader
라는 변수에 저장을 하고, writeHead
메소드를 사용해 요청에 대한 응답 헤더에 Allow 범위를 입력한다.
const defaultCorsHeader = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Accept',
'Access-Control-Max-Age': 10
};
res.writeHead(200, defaultCorsHeader);
따라서, 다른 origin
에서 OPTIONS
메소드를 통해 preflight
요청을 하면 서버에서 Allow 헤더를 응답하고 해당 헤더에 조건이 맞다면 서버 요청을 이어나갈 수 있다.
최종적으로 변환된 body(data)를 end
메소드를 사용하여 응답하면된다.
res.end(body);