NodeJs 第四章 net、http、https 模块

net、http、https 模块

  • net
    • [net 模块是什么](#net 模块是什么)
    • [net 模块能干些什么](#net 模块能干些什么)
    • [net 模块如何创建服务器](#net 模块如何创建服务器)
    • [net 模块如何创建客户端](#net 模块如何创建客户端)
  • http
  • https
    • [如何获取 SSL 证书](#如何获取 SSL 证书)
    • [如何创建一个 https 服务](#如何创建一个 https 服务)

net

net 模块是什么

net 模块异步网络 API,用于创建基于流的 TCP 或 IPC 服务器 (net.createServer()) 和客户端

net 模块能干些什么

  1. 可以进行进程间的通信(IPC)
  2. 网络通信(TCP/IP)

net 模块如何创建服务器

  1. 使用 net.createServer(), 他会返回一个 TCP 或 ICP 服务器
  2. server.listen(port) 监听当前计算机的某个端口
  3. server.on("listening", ()=>{}),开始监听端口后触发的事件
  4. server.on("connection", socket=>{}), 当某个连接到来时,触发改事件。事件的监听函数会获得一个socket对象。

net 模块如何创建客户端

  • 可以使用net.createConnection(options[, connectListener]) ,返回一个 socket

  • 什么是 socket

    socket是一个特殊的文件,在node中表现为一个双工流对象。通过向流写入内容发送数据,监听流的内容获取数据。

http

http 模块 是建立在 net 模块 之上,无须手动管理 socket,也不需要手动组装消息格式,其本质是 TCP/IP 服务.

如何发送一个http请求

  1. 使用**http.request(url[, options][, callback])**发送请求,会返回一个 request
  2. request.end([data[, encoding]][, callback]) 完成发送请求
javascript 复制代码
const http = require('http')

const request = http.request('http://xxx', {method: 'GET'}, (res) => {
    res.on('data', (chunk) => {
        console.log(chunk.toString('utf8'))
    })
    res.on('end', () => {
        console.log('end')
    })
})

request.end();

如何创建 http 服务

  1. 使用http.createServer([options][, requestListener]),返回 http 服务
  2. 使用 server.listen() 监听端口号
javascript 复制代码
const server = http.createServer((req, res) => {
    console.log(req, res)
})
server.listen(8081)

现在就可以通过 http://localhost:8081/ 访问了

总结

  1. 客户端
    • 请求:ClientRequest对象
    • 响应:IncomingMessage对象
  2. 服务器
    • 请求:IncomingMessage对象
    • 响应:ServerResponse对象

https

https 和 http 的区别是 https 多了一个 SSL 证书

如何获取 SSL 证书

  • 方式一: 网上购买权威机构证书,需要有自己的服务器,域名。此方式用于应用在部署环境中
  • 方式二: 本地生成证书
  1. 如果是windows电脑,需要下载 openssl,也可一直接下载源码,自行构建。
  2. 生成CA私钥
javascript 复制代码
openssl genrsa -des3 -out ca-pri-key.pem 1024
	genrsa:密钥对生成算法
	-des3:使用对称加密算法des3对私钥进一步加密
		命令运行过程中会让用户输入密码,该密码将作为des3算法的key
	-out ca-pri-key.pem:将加密后的私钥保存到当前目录的ca-pri-key.pem文件中
		pem:Privacy-Enhanced Mail (PEM) 
	1024:私钥的字节数
  1. 生成CA公钥(证书请求)
javascript 复制代码
openssl req -new -key ca-pri-key.pem -out ca-pub-key.pem
	通过私钥文件ca-pri-key.pem中的内容,生成对应的公钥,保存到ca-pub-key.pem中
	运行过程中要使用之前输入的密码来实现对私钥文件的解密
	其他输入信息
		Country Name:国家名  CN
		Province Name:省份名 Sichuan
		Local Name:城市名
		Company Name:公司名
		Unit Name:部门名
		Common Name:站点名
		。。。
  1. 生成CA证书
javascript 复制代码
	openssl x509 -req -in ca-pub-key.pem -signkey ca-pri-key.pem -out ca-cert.crt
 使用X.509证书标准
 通过证书请求文件ca-pub-key.pem生成证书
 使用私钥ca-pri-key.pem加密
 证书保存到ca-cert.crt文件中
  1. 生成服务器私钥
javascript 复制代码
openssl genrsa -out server-key.pem 1024
  1. 生成服务器公钥
javascript 复制代码
openssl req -new -key server-key.pem -out server-scr.pem
  1. 生成服务器证书
javascript 复制代码
openssl x509 -req -CA ca-cert.crt -CAkey ca-pri-key.pem -CAcreateserial -in server-scr.pem -out server-cert.crt

如何创建一个 https 服务

javascript 复制代码
const https = require("https");
const server = https.createServer(
  {
    key: fs.readFileSync(path.resolve(__dirname, "./server-key.pem")), //私钥
    cert: fs.readFileSync(path.resolve(__dirname, "./server-cert.crt"))
  },
  (req, res)  => {}
);
server.on("listening", () => {
  console.log("server listen 443");
});
server.listen(443);
相关推荐
程序员-珍1 小时前
虚拟机ip突然看不了了
linux·网络·网络协议·tcp/ip·centos
魏大橙3 小时前
linux RCE本地/公网测试
网络·网络协议·udp
l1x1n03 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
鄃鳕4 小时前
HTTP【网络】
网络·网络协议·http
读心悦5 小时前
如何在 Axios 中封装事件中心EventEmitter
javascript·http
CXDNW6 小时前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
秋夫人8 小时前
http cache-control
网络·网络协议·http
叶北辰CHINA8 小时前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡
小白学大数据10 小时前
User-Agent在WebMagic爬虫中的重要性
开发语言·爬虫·http
limengshi13839212 小时前
通信工程学习:什么是RIP路由信息协议
网络·网络协议·学习·智能路由器·信息与通信