http는 암호화되지 않은 데이터를 전송하는 프로토콜이기 때문에 보안에 취약하다.
이를 보완하기 위해 https 모듈은 웹 서버에 SSL 암호화를 추가했다. GET, POST 요청 시 데이터를 암호화해서 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없도록 한다.
주소창에 자물쇠 표시가 있다면 https가 적용된 페이지이다.
http/2는 요청 및 응답 방식이 html/1.1보다 효율적으로 개선되었다. 따라서 http/2는 웹의 속도도 비교적 빠르다.
Node에서 http2 모듈을 사용하면 http/2를 사용할 수 있으며 SSL 암호화도 설정된다.
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
// ...
res.end();
})
.listen(8080, () => {
console.log('8080 port');
})
const https = require('https');
const fs = require('fs');
https.createServer({
cert: fs.readFileSync('도메인인증서경로'),
key: fs.readFileSync('도메인비밀키경로'),
ca: [
fs.readFileSync('상위인증서경로'),
fs.readFileSync('상위인증서경로'),
],
}, (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
// ...
res.end();
})
.listen(443, () => {
console.log('443 port');
})
const http2 = require('http2');
const fs = require('fs');
http2.createSecureServer({
cert: fs.readFileSync('도메인인증서경로'),
key: fs.readFileSync('도메인비밀키경로'),
ca: [
fs.readFileSync('상위인증서경로'),
fs.readFileSync('상위인증서경로'),
],
}, (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
// ...
res.end();
})
.listen(443, () => {
console.log('443 port');
})