node.js内置模块之---http 和 https 模块

news/2025/1/8 2:30:03/

http 和 https 模块的作用

Node.js 中,httphttps 模块用于创建和处理 HTTP 和 HTTPS 请求/响应

http模块

http 模块提供了用于实现 HTTP 协议的功能。它可以用来创建 HTTP 服务器,处理 HTTP 请求,发送 HTTP 响应,同时也可以用来发送 HTTP 客户端请求。

创建 HTTP 服务器

使用 http.createServer() 方法可以创建一个 HTTP 服务器,该服务器可以监听 HTTP 请求并返回响应。

const http = require('http');// 创建一个 HTTP 服务器
const server = http.createServer((req, res) => {// 设置响应头res.writeHead(200, { 'Content-Type': 'text/plain' });// 返回响应res.end('Hello, HTTP!');
});// 监听 3000 端口
server.listen(3000, () => {console.log('Server is running at http://localhost:3000');
});
  • req: 请求对象,包含有关客户端请求的信息(例如 URL、请求头、查询参数等)。
  • res: 响应对象,用来发送响应给客户端。通过 res.writeHead() 设置 HTTP 状态码和响应头,使用 res.end() 发送响应数据。
处理 HTTP 请求

可以使用 req 对象来处理请求,获取请求的相关信息。

const http = require('http');const server = http.createServer((req, res) => {// 获取请求方法(GET, POST 等)const method = req.method;// 获取请求的 URLconst url = req.url;console.log(`Method: ${method}, URL: ${url}`);// 响应处理res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Request received');
});server.listen(3000, () => {console.log('Server is running on http://localhost:3000');
});
发送 HTTP 请求

使用 http.request() 方法可以发送 HTTP 请求。这可以用于与其他 HTTP 服务进行通信。

const http = require('http');const options = {hostname: 'example.com',port: 80, // 默认的 HTTP 端口path: '/',method: 'GET'
};const req = http.request(options, (res) => {let data = '';res.on('data', (chunk) => {data += chunk;});res.on('end', () => {console.log(data);});
});req.on('error', (e) => {console.error(`Problem with request: ${e.message}`);
});req.end();
  • options: 请求的配置,包括目标服务器的地址、端口、请求方法等。
  • res: 响应对象,用于处理服务器的响应数据。

https 模块

https 模块提供了与 http 模块类似的功能,但它使用 SSL/TLS 加密 来保证数据传输的安全性。通常在涉及到敏感数据(如用户名、密码、支付信息等)的应用中,需要使用 HTTPS 来加密通信。

创建 HTTPS 服务器

与 HTTP 服务器类似,HTTPS 服务器需要提供 SSL/TLS 证书(公钥和私钥),以便在建立连接时加密通信。

const https = require('https');
const fs = require('fs');// 读取 SSL 证书和私钥
const options = {key: fs.readFileSync('path/to/private-key.pem'),cert: fs.readFileSync('path/to/certificate.pem')
};const server = https.createServer(options, (req, res) => {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Hello, HTTPS!');
});server.listen(3000, () => {console.log('HTTPS server is running on https://localhost:3000');
});
  • key: 私钥文件(通常是 .pem 格式)。
  • cert: 公钥证书文件(通常是 .pem 格式)。
  • options:这些选项用于配置加密通信。
发送 HTTPS 请求

HTTPS 客户端请求与 HTTP 相似,区别在于使用 https.request() 发送加密请求。

const https = require('https');const options = {hostname: 'example.com',port: 443,  // 默认的 HTTPS 端口path: '/',method: 'GET'
};const req = https.request(options, (res) => {let data = '';res.on('data', (chunk) => {data += chunk;});res.on('end', () => {console.log(data);});
});req.on('error', (e) => {console.error(`Problem with request: ${e.message}`);
});req.end();

http 和 https 模块的区别

特性http 模块https 模块
协议非加密的 HTTP 协议加密的 HTTPS 协议
端口默认使用端口 80默认使用端口 443
安全性不加密数据,容易遭受中间人攻击加密通信,保护数据隐私
证书不需要证书需要 SSL/TLS 证书
应用场景公共内容、测试环境需要保护用户数据的应用(如银行、支付系统)

使用 https 和 http 模块时的注意事项

  • 证书:使用 https 时,必须提供有效的 SSL/TLS 证书。可以通过自签名证书进行开发,但生产环境必须使用可信的证书(例如来自 Let's Encrypt、VeriSign 等)。
  • 性能https 通常比 http 稍慢,因为它涉及到加密/解密操作。在不需要加密的场景下,尽量使用 http
  • 安全:在生产环境中,尤其是涉及敏感信息的情况下,必须使用 HTTPS 来加密通信,防止数据被窃听或篡改。


http://www.ppmy.cn/news/1561140.html

相关文章

大象喝水C++

题目&#xff1a; 代码&#xff1a; #include<iostream> #include<cmath> using namespace std; int main(){double r,c,h,pi,v,water;pi3.14159;cin>>h>>r;vpi*r*r*h/1000.0;water20.0/v;cceil(water);cout<<c<<endl;return 0; }

MCS-51单片机常用汇编指令和特殊功能寄存器~

今天给小伙伴们总结了一下MCS-51单片机常用的汇编指令和特殊功能寄存器&#xff0c;希望能在大家解决问题时提供帮助~。 一.汇编指令 1.数据传输指令 MOV A, #data: 将立即数传送到累加器A。MOV A, Rn: 将寄存器Rn的内容传送到累加器A。MOV Rn, #data: 将立即数传送到寄存器…

springboot573学院个人信息管理系统(论文+源码)_kaic

摘 要 随着社会的发展&#xff0c;学院个人信息的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但学院个人信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得学院个人信息&#xff0c;因此&#xff0c;设计一种安全高效的学院个人信息管…

OneFlow的简单介绍

OneFlow 是北京一流科技有限公司旗下的采用全新架构设计的开源工业级通用深度学习框架。以下是关于 OneFlow 的详细介绍&#xff1a; 本篇文章的目录 特点 功能 应用场景 发展历程 特点 简洁易用的接口&#xff1a;为深度学习相关的算法工程师提供一套简洁易用的用户接口…

【Go研究】Go语言脚本化的可行性——yaegi项目体验

0x01 背景——云计算中脚本化困境 作为云基础设施管理中&#xff0c;大量需要跟文件系统、容器等相关的操作&#xff0c;这些操作实现通常用脚本来实现。 现在探讨下&#xff0c;这些脚本为什么一定要用脚本语言来实现&#xff0c;以及目前实现中的常见的问题。 常见的两个场…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议&#xff0c;它替代了原来非标准的第二层协议&#xff08;如SLIP&#xff09;。在TCP/IP协议集中&#xff0c;PPP是一种用来同步调制连接的数据链路层协议&#xff08;OSI模式中的第二层…

【设计模式-1】软件设计模式概述

1. 软件设计模式的产生背景 “设计模式”这个术语最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977 年&#xff0c;美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大&#xff08;Christopher Alexander&#xff09;在…

我用AI学Android Jetpack Compose之Kotlin篇

前面我们大致了解了Compose项目的结构&#xff0c;基本代码&#xff0c;构建脚本等&#xff0c;这次我们来了解Kotlin的基本语法&#xff0c;答案 来自 通义千问 文章目录 1.我要学习Compose开发&#xff0c;请给我科普一下基本的Kotlin知识1. **变量声明**2. **函数定义**3. *…