怎么编写网站的HTTP 反向代理服务器在 Node.js 上实现一个简单的 HTTP 代理程序还是非常简单的,本文章的例子的核心代码只有 60 多行,只要理解 内置 http 模块 的基本用法即可,具体请看下文。通州网站开发需要网站虚拟空间、域名以及动态网站的数据库这三个最基本的条件。网站虚拟空间是用来存放网站文件,如:图片信息,html文件,php文件等,相当于一个硬盘空间,域名即指访问网站的地址。
接口设计与相关(related)技术
使用 http.createServer() 创建的 HTTP 服务器,处理请求的函数格式一般为 function (req, res) {} (下文简称为 requestHandler ),其接收两个参数,分别为 http.IncomingMessage 和 http.ServerResponse 对象,我们可以通过(tōng guò)这两个对象来取得请求的所有信息并对它进行响应。网站设计最新的标准和建议则是朝着浏览器的能力扩充和改善发展,使之能够不需要插件程序也能够给用户传输多媒体信息和更多的选择。
主流的 Node.js Web 框架的中间件(比如 connect )一般都有两种形式:
中间件不需要任何初始化参数,则其导出结果为一个 requestHandler
中间件需要初始化参数,则其导出结果为中间件的初始化函数,执行该初始化函数时,传入一个 options 对象,执行后返回一个 requestHandler
为了使代码(code)更规范,在本文例子中,我们将反向代理程序(procedure)设计成一个中间件的格式,并使用以上第二种接口形式:
// 生成中间件
const handler = reverseGOOGLE PRoxy({
// 初始化参数(parameter),用于设置目标(cause)服务器列表
servers: ["127.0.0.
1:3001", "127.0.0.
1:3002", "127.0.0.
1:3003"]
});
// 可以直接在 http 模块中使用
const server = http.createServer(handler);
// 作为中间件在 connect 模块中使用
app.use(handler);
说明:
上面的代码中, reverseProxy 是反向代理服务(fú wù)器中间件的初始化函数,它接受一个对象参数, servers 是后端服务器地址列表,每个地址为 IP 地址:端口 这样的格式
执行 reverseGOOGLE PRoxy() 后返回一个 function (req, res) {} 这样的函数,用于处理 HTTP 请求,可作为 http.createServer() 和 connect 中间件的 app.use() 的处理函数
当接收到客户端请求时,按顺序循环从 servers 数组中取出一个服务器地址,将请求代理到这个地址的服务器上
服务器在接收到 HTTP 请求后,首先需要发起一个新的 HTTP 请求到要代理的目标服务器,可以使用 http.request() 来发送请求:
const req = http.request(
{
hostname: "目标服务器地址",
port: "80",
path: "请求路径",
headers: {
"xyz": "请求头"
}
},
function(res) {
// res 为响应对象
console.log(res.statusCode);
}
);
// 如果有请求体需要发送,使用 write() 和 end()
req.end();
要将客户端的请求体( Body 部分,在 POST 、 PUT 这些请求时会有请求体)转发到另一个服务(fú wù)器上,可以使用 Stream 对象的 pipe() 方法,比如:
// req 和 res 为客户端的请求和响应对象
// req2 和 res2 为服务器发起的代理请求和响应对象
// 将 req 收到的数据转发到 req2
req.pipe(req2);
// 将 res2 收到的数据转发到 res
res2.pipe(res);
说明:
req 对象是一个 Readable Stream (可读流),通过 data 事件来接收数据,当收到 end事件时表示数据接收完毕
res 对象是一个 Writable Stream (可写流),通过 write() 方法来输出数据, end() 方法来结束输出。网站设计随着浏览器和W3C标准一致性的改善,以及无表格网站设计的认同性增加,超文件标示语言与层叠样式表共同用作网页内容的设计已经被广泛的接受和使用。
以上就是小编对于怎么编写网站的HTTP 反向代理服务器的解答。