HTTP 모듈

HTTP

  • TCP/IP를 기반으로 하는 프로토콜
  • 웹서버는 클라이언트에서 요청하면 서버에서 응답을 주는 형식으로 되어있다

server 객체

  • http 모듈에서 가장 중요한 객체는 server객체
  • http 모듈의 createServer() 메서드를 사용하면 server 객체 생성
  • 아래 예제는 서버가 응답하지 않으므로 페이지에 내용을 표시하지 않고 계속 응답만 기다린다
var http = require('http');
// 웹 서버를 생성합니다.
var server = http.createServer();
// 웹 서버를 실행합니다.
server.listen(52273);
메서드 이름 설명
request 클라이언트가 요청할 때 발생하는 이벤트
connection 클라이언트가 접속할 때 발생하는 이벤트
close 클라이언트가 종료될 때 발생하는 이벤트
checkContinue 클라이언트가 지속적인 연결을 하고 있을 때 발생하는 이벤트
upgrade 클라이언트가 HTTP 업그레이드를 요청할 때 발생하는 이벤트
clientError 클라이언트에서 오류가 발생할 때 발생하는 이벤트
var http = require('http');
// server 객체를 생성
var server = http.createServer();

// server 객체에 이벤트 연결
server.on('request', function(code){
  console.log('Request On');
});

server.on('connection', function(code){
  console.log('Connection On');
});

server.on('close', function(code){
  console.log('Close On');
});

// listen()메서드 실행
server.listen(52273);

response 객체

| 메서드 이름 | 설명 | |:——–:|:——–:| | writeHead(statusCode, object) | 응답 헤더를 작성 | | end([data], [encoding]) | 응답 본문을 작성|

  • 클라이언트가 서버 응답을 받으면 페이지가 정상적으로 띄워짐
// 웹서버를 생성하고 실행합니다
require('http').createServer(function(request, response){
  response.writeHead(200, {'Content-Type':'text/html'});
  response.end('<h1>Hello World..!</h1>');

}).listen(60001);

File System 모듈을 사용한 HTML 페이지 제공

  • javascript 파일 위에서 모든 html 페이지를 문자열로 작성하는 것은 불가능
  • file System 모듈을 사용하여 서버에 존재하는 HTML 페이지를 클라이언트에 제공
  • html과 js 파일을 생성
// 모듈을 추출합니다.
var fs = require('fs');
var http = require('http');

// 서버를 생성하고 실행합니다.
http.createServer(function (request, response) {
  // HTML 파일을 읽습니다.
  fs.readFile('6-8.html', function (error, data) {
    response.writeHead(200, { 'Content-Type': 'text/html' });
    response.end(data);
  });
}).listen(52273, function () {
  console.log('Server Running at http://127.0.0.1:52273');
});

-html

<!DOCTYPE html>
<html>
<head>
  <title>Index</title>
</head>
<body>
  <h1>Hello Node.js</h1>
  <h2>Author. RintIanTta</h2>
  <hr />
  <p>Lorem ipsum dolor sit amet.</p>
</body>
</html>

이미지와 음악파일 제공

  • 60001번 포트로는 이미지 파일 제공. 60002번 포트는 음악 파일 제공 ~~~ var fs = require(‘fs’); var http = require(‘http’);

// 60001번 포트에 서버를 생성하고 실행 http.createServer(function(request, response){ // 이미지 파일 읽기 fs.readFile(‘Chrysanthemum.jpg’, function(error, data){ response.writeHead(200, {‘Content-Type’:’image/jpeg’}); response.end(data); }); }).listen(60001, function(){ console.log(‘Server Running at http://127.0.0.1:60001’); });

// 60002번 포트에 서버를 생성하고 실행 http.createServer(function(request, response){ // 음악 파일을 읽습니다 fs.readFile(‘Kalimba.mp3’, function(error, data){ response.writeHead(200, {‘Content-Type’:’audio/mp3’}); response.end(data); }).lesten(60002, function(){ console.log(‘Server Running at http://127.0.0.1:60002’); }); });


### 쿠키 생성
- 쿠키는 key, value로 이루어진 데이터
- 이름, 값 파기 날짜, 경로 정보 등을 가지고 있다
- 일정 기간동안 데이터를 저장할 수 있으므로 로그인을 유지할 때 사용
- response 객체의 Set-Cookie 속석으로 쿠기를 할당할 수 있음
- 아래 예제는 쿠키를 출력하는 예제. 첫 접속 시에는 쿠키가 없으므로 undefined를 출력하지만 두번째 부터는 쿠키의 내용을 출력한다

var http = require(‘http’); http.createServer(function(request, response){ // 변수를 선언 var date = new Date(); date.setDate(date.getDate() + 7);

// 쿠키 입력 response.writeHead(200, { ‘Content-Type’:’text/html’, ‘Set-Cookie’:[‘breakfast = toast;Expires = ‘+ date.toUTCString(), ‘dinner=chicken’] }); // 쿠키를 출력합니다 response.end(‘<h1>‘+request.headers.cookie + ‘</h1>’); }).listen(60001, function(){ console.log(‘server Start’); });


### 페이지 강제 이동
- 네이버 로그인 시 흰화면으로 이동후 재빨리 메인화면으로 이동
- 이렇게 페이지 강제 이동이 발생한다
- 사용법은 응답 헤더의 Location 속성에 이동할 url을 넣어주면 된다
| 응답번호 | 설명 |
|:--------:|:--------:|
| 1XX | 처리중 |
| 2XX | 성공 |
| 3XX | 리다이렉트 |
| 4XX | 클라이언트 오류 |
| 5XX | 서버 오류 |

var http = require(‘http’);

http.createServer(function(request, response){ response.writeHead(302, {‘Location’:’https://parkwonhui.github.io/’}) response.end(); }).listen(60001, function(){ console.log(‘server Start’); });


### request 객체
- 사용자가 요청한 페이지를 적절하게 제공해주고, 요청 방식에 따라서 페이지를 구분할 수 있음
- url 모듈을 사용해 pathname 추출 후 조건문으로 페이지를 따로 처리
| 속성 이름 | 설명 |
|:--------:|:--------:|
| method | 클라이언트의 요청 방식을 나타냄 |
| url | 클라이언트가 요청한 URL을 나타냄 |
| headers | 요청 메시지 헤더를 나타냄 |
| trailers | 요청 메시지 트레일러를 나타냄 |
| httpVersion | http 프로토콜 버전을 나타냄 |

var http = require(‘http’); var fs = require(‘fs’); var url = require(‘url’);

http.createServer(function(request, response){ // 변수를 선언 var pathname = url.parse(request.url).pathname; // 페이지를 구분 if(‘/’ == pathname){ fs.readFile(‘6-17.html’, function(error, data){ response.writeHead(200, {‘Content-Type’:’text/html’}); response.end(data); }); }else if(‘/OtherPage’ == pathname){ fs.readFile(‘6-18.html’, function(error, data){ response.writeHead(200, {‘Content-Type’:’text/html’}); response.end(data);

});   }

}).listen(60001, function(){ console.log(‘server Start’); }); ~~~