Node.js HTTP, HTTPS 모듈은 각각 require(‘http’), require(‘https’)로 불러옵니다. HTTP는 서버와 클라이언트를 모두 제공합니다.

http.Server

http.Server는 EventEmitter의 객체이므로 아래 이벤트를 사용할 수 있습니다:

  • request 이벤트: 요청이 들어올 때마다 발생하고 콜백함수는 function(request, response) {} , ‘request’는 http.ServerRequest의 객체이고 response는 http.ServerResponse의 객체임.
  • connection 이벤트: 새 TCP 스트림이 생기면 발생함. 콜백함수는 function(socket) {} , ‘socket’은 net.Socket의 객체임.
  • close 이벤트: 서버가 닫힐 때 발생함. 콜백함수는 function() {}

서버 생성을 위해 http.createServer(callback) 을 실행하면 자동으로 request 이벤트에 등록이 됩니다. server.listen(port, [hostname], [callback])을 실행하면 서버가 지정된 호스트와 포트로부터 연결을 받기 시작합니다. ‘hostname’을 생략할 경우 IPv4의 모든 주소로부터 요청을 받습니다. listen()은 비동기 함수로 바인딩이 완료되면 콜백에 등록된 함수가 실행됩니다.

http.ServerRequest

http.ServerRequest는 EventEmitter의 객체이므로 아래 이벤트를 사용할 수 있습니다.

  • data 이벤트: 메시지 바디의 일부를 받으면 발생하는 이벤트. 콜백함수는 function (chunk) {}
  • end 이벤트: 요청이 종료될 때 요청당 1회 발생하는 이벤트. 이 이벤트 이후에는 data 이벤트가 발생하지 않음. 콜백함수는 function() {}

멤버변수

  • request.method: GET, POST 등의 HTTP 메서드를 리턴함.
  • request.url: 요청 URL을 나타냄.
  • request.header: 헤더 정보를 알 수 있음.
  • request.httpVersion: HTTP 요청의 버전을 나타냄.

request.setEncodding(encoding)으로 요청 바디의 인코딩을 설정할 수 있습니다. encoding은 utf8 또는 binary를 사용할 수 있고, 기본값은 null입니다. (null은 Buffer 객체를 사용함)

request.pause(), request.resume() 은 요청에서 이벤트가 발생하는 것을 멈추거나 다시 시작할 수 있습니다.

http.ServerResponse

이 객체는 응답객체로써 Writable Stream 입니다. response.writeHead(statusCode, [reasonPhrase], [headers])를 사용해 응답 헤더를 지정합니다. ‘statusCode’는 200이나 404 같은 HTTP 상태 코드이고 ‘headers’는 {‘Content-Length’:body.length} 처럼 헤더 정보를 JSON으로 지정합니다.

response.write(chunk, encoding=’utf8′)을 사용하면 응답 body의 chunk 데이터를 보냅니다. 응답을 종료하려면 response.end([data], [encoding])을 사용하고 모든 응답에 반드시 end() 함수가 실행되어야 합니다. end() 함수에 data를 지정하면 wirte(data)를 실행한 후 end()를 실행한 것과 동일합니다.