用nodejs搭建代理服务器步骤

article/2025/11/9 11:31:32

前端开发者在工作中常常遇到跨域的问题,一般我们遇到跨域问题主要使用以下办法来解决:

1、jsonp

2、cors

3、配置代理服务器。

 

jsonp不是很灵活,只能发送get请求,不能发送psot请求,而cors虽然可以支持多种请求格式,但是如果请求携带cookie的话,还需要服务端和客户端分别配置一下,个人感觉也很麻烦。

相对于前两种,使用代理服务器解决跨域问题就简单了好多。

浏览器由于同源策略的原因,不同域名之间发送ajax请求,响应的数据不会被浏览器加载。而服务器向服务器发送请求则没有同源策略的限制。

下图便是代理服务器的原理了:

代理服务器只是起一个中转作用,配置代理服务器的方法有很多种,比如利用apache、nginx、tomcat等等,今天给大家介绍的是用nodejs配置代理服务器,用nodejs配置代理服务器,我们需要借助两个npm包,一个是web开发框架express,一个是express中间件http-proxy-middleware 。

首先第一步我们先用express搭建两个服务器,一个静态资源服务器端口号为3000,一个接口服务器端口号为5000,静态资源服务器代码如下:

var express = require('express');
var app = express();
app.use(express.static('./public'));
app.listen(3000);

并且在public文件夹下新建a.html,并且在页面中使用jquery,使用jquery发送ajax向接口服务器发送测试请求。

a.html代码如下:

接着搭建接口服务器,接口服务器端口号为5000,代码如下

观察代码,我们设计了三个接口,都是get请求,只是url不同。

此时启动静态资源服务器和接口服务器,然后访问静态资源服务器下面的a.html,结果如图:

如图所示,发生跨域了,此时在静态资源服务器中安装http-proxy-middleware 中间件,并将其集成到静态资源服务器中。

代码如下

此时重启静态资源服务器,并将啊,a.html页面中发送ajax的地址稍微改动一下,如图:

观察代码:我们代码原来是直接请求5000端口服务器的数据,现在将其改成相对路径,相对于当前网页所在的服务器,当前的网页所在的静态服务器端口为3000。

当我们访问:http://localhost:3000/a.html,结果如图:

看ajax请求的地址是如何拼接的:

得出结论:相对路径会被自动拼接。

再看请求的结果,成功了:

成功跨域了,当然这样说不严谨,浏览器并没有参与跨域,而是页面中的ajax请求的地址还是3000端口的服务,只不过是3000端口的服务接收到请求,将其转发给了5000端口的服务,并将5000端口的服务结果原封不动的返还给了浏览器。

回顾上面的代码,我们只是在静态资源服务器中应用了http-proxy-middleware中间件,这个中间件的使用非常简单,分为如下几步:

1、安装并引入到项目中。

2、通过app.use挂载中间件,这里需要注意的是,在挂载这个中间件的时候,app.use需要设置一个前置路由,和项目本来的路由作区分。

 

调用这个中间件的时候需要设置几个常用参数:

1、target,指的是目标网站,或者被代理的网站。

2、changeOrigin是否更改host。默认为false,不重写。

3、pathRewrite路径重写,这个特性看需求。

 

简单配置一下:

如果这样配置,当a.html中发送请求时,这样写:

这个请求会被静态资源服务器转化为:

http://localhost:5000/api/a

也就是说如果不设置pathRewrite的话,页面中的请求地址会被原封不动的追加到目标服务器地址的后面。

而如果真正的接口地址是这样的:

http://localhost:5000/b

 

代理服务器该如何配置呢?

此时在页面中发送求请:

此时根据代理服务的重写规则,最终请求的地址为:

 

http://localhost:5000/b

以上便是pathRewrite的作用。

接着看changeOrigin的作用,当我们将changeOrigin设置为true时,我们在接口服务器打印req.headers,看看结果如何:

仔细观察host是localhost:5000,而将changeOrigin改为false呢?再次打印req.headers:

此时查看host是localhost:3000,

 

changeOrigin就是是否重写请求头中的host,代理服务器会在请求头中加入相应Host首部,然后目标服务器就可以根据这个首部来区别要访问的站点了。假如你在本地80端口起了apache服务器,服务器配了两个虚拟站点a.com b.com,设置代理之后并且changeOrigin为true 。此时就可以正确方法访问到虚拟主机下的文档内容。否则访问a b站点等同于访问localhost。当然如果你的服务器没有配置虚拟主机,完全可以省略这个参数,就像上面演示的代码,完全可以省略这个参数。因为接口服务器并没有设置虚拟主机。

 

以上便是用nodejs搭建代理服务器的知识了,这个http-proxy-middleware中间件用的很广泛,在vue-cli或者create-react-app生成的项目中都内置了这个中间件,配置规则基本和上面相同


http://chatgpt.dhexx.cn/article/VA7PnKEc.shtml

相关文章

关于腾讯云搭建代理服务器的详细过程

腾讯云的规定是一个账号一个地区只能有20个公网IP: 1)点击实例名 2)添加辅助网卡 3)绑定弹性公网ip 4)为辅助网卡绑定安全组 5)修改网卡配置文件 ### 复制eth0的网卡文件 ### [root@VM_1_62_centos ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth{0,1} ### 修改eth1文…

使用腾讯云Ubuntu20.04搭建代理服务器

文章目录 安装配置文件位置云服务器开放端口 添加规则运行停止状态重启连接测试参考 安装 sudo apt-get install tinyproxy配置文件位置 /etc/tinyproxy.conf 或者 /etc/tinyproxy/tinyproxy.conf # 预设是8888 Port, 可以更改 Port 8888 # 将127.0.0.1改成你自己的IP All…

xray搭建代理服务器

xray 代理服务器配置 1.下载xray 2.执行 xattr -c /Users/mac/Downloads/Xray-macos-64.zip 3.配置 log:LogObject  waring 改成debug 2.InboundObject :  protocol:HTTP  settings 设置为如下,address和…

linux搭建代理服务器

最近在做某个项目时,由于机房环境是内网环境,但是有些服务(短信发送、email发送)需要访问外网交互,所以需要搭建代理服务器。 该服务器可以访问外网,所有的内网服务通过该代理服务器访问外网。简易示意图如…

Ubuntu 搭建代理服务器squid

目录 前言 工具准备 安装squid 修改配置文件 重新加载配置文件 查看squid的端口状态 为浏览器配置代理 前言 本来这次的测试是想在校园网环境下 实现无认证通过某个已认证的主机代理上网的! 可后来通过测试我发现只有主机通过校园网认证后才能访问校园网内(局域网)的主机…

mysql的字符集修改_修改MySQL字符集

1.关于MySQL字符集 MySQL的字符集支持(CharacterSet Support)有两个方面: 字符集(Characterset)和排序方式(Collation)。 MySQL对于字符集的支持细化到四个层次:服务器(server),数据库(database),数据表(table)和连接(connection)。 2.查看MySQL字符集 2.1.查看字符集的设置…

mysql 字符集设置

一、 MySQL字符集设置 (1) 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – character_set_connection:连接层字符集 – characte…

mysql 所有字符集_mysql字符集

mysql字符集 字符集基础 字符集:数据库中的字符集包含两层含义 各种文字和符号的集合,包括各国家文字,标点符号,图形符号,数字等。 字符的编码方式,即二进制数据与字符的映射规则; 字符集分类: ASCII:美国信息互换标准编码;英语和其他西欧语言;单字节编码,7位(bits…

MySQL字符集设置为UTF-8,但控制台仍然出现中文乱码问题

问题描述:MySQL字符集为UTF-8,控制台显示结果的中文字符仍然会出现乱码,如何解决? 详细描述:安装MySQL的时候选择了UTF8的字符集,为了方便数据库维护,所有字符集也都设置了UTF8的字符集&#xf…

mysql服务器默认操作字符集,MySQL 字符集设置

数据库建库时默认是设置的latin1编码,查看系统的字符集和排序方式 show variables like character%; SHOW VARIABLES LIKE collation_%; SET NAMES gb2312; show variables like character%; SET NAMES x 相当于 SET character_set_client = x; SET character_set_results = x…

mysql数据库的字符集设置_mysql数据库的字符集设置

原文链接:http://blog.csdn.net/sin90lzc/article/details/7648439 作者:开浪裤 Notice:文章基于ubuntu系统而写 1.关于MySQL字符集 MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation)。 MyS…

mysql中设置字符集语句_MYSQL字符集设置的方法详解(终端的字符集)

前言 每次利用终端 创建数据库或者创建表的时候,字符集都是latin1,或者进行插入值的时候,显示的是乱码(不指定字符集的时候)如下: 查看当前数据库的字符集 character_set_client:客户端请求数据的字符集 character_set_connection:客户机/服务器连接的字符集 character_s…

配置MySQL字符集教程

引 ​ MySQL 默认的字符集叫做拉丁文, 是不支持中文的. 为了能够存储中文, 就需要把字符集 改成 UTF-8 修改 MySQL 字符集的办法有很多种, 而修改 MySQL 的配置文件则是一个 一劳永逸 的办法~ 1. 先确认当前数据库的字符集 首先使用 SQL 语句 show variables like character%; …

MySQL的字符集设置

在安装完mysql后,最好先设置一下字符集。因为如果不设置的话,mysql5.7新创建的数据库使用的是latin字符集,这会导致数据库表不能插入中文。mysql8.0默认已经使用utf-8 对于新手来说,如果你已经创建了数据库,那么可以直…

MySQL的字符集设定

我们有时在查看数据库数据时,看到一写乱码,这是由于mysql数据库字符集设定的问题,下面我就来谈谈如何正确设定字符集 在mysql中可以设定的字符集有:①服务器默认字符集 ②数据库字符集 ③表的字符集 ④列的字符集。 如果一个级别…

MySQL字符集设置

一、 MySQL字符集设置 (1) 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – character_set_connection:连接层字符集 – characte…

【Win10桌面美化】一个精致的程序员桌面是怎样的呢(花了一上午时间两种风格!)

或许大家都喜欢苹果的风格,但奈何一般买的电脑都是Win10系统,今天整理了一上午,终于打造了一个自己觉得挺不错的两种风格桌面,至少不是很差的那种。一起来看看吧~ 风格一 风格二 如果你也想拥有这样的桌面的话,评论区…

程序员的办公桌上,都出现过哪些神奇的玩意儿 ~

梦想橡皮擦,一个逗趣的互联网高级网虫。 2020 年,橡皮擦又认识了很多程序员,他们除了技术神一般的存在,办公桌上也总是出现迷一般的物品。 今天我们不聊技术,看一看我们程序员的办公桌上,都见到过哪些神奇…

程序员的桌面是什么样的?美工:那...不是我的桌面吗?

近日,有网友提问道:作为一个程序员,一直使用的都是默认Windows10桌面,最近被妹子吐槽太丑,打算换一个,不知道各位程序员的桌面都长什么样子? 于是小编整理了一些程序员桌面的内容分享给大家,把电脑桌面设置成一些自己喜欢的事物,不仅可以自己过足眼瘾,还能吸引过路的…

程序员桌面都这么秀?网友:用砖头当杯垫这样合适吗?留着吓谁

当一个程序员刚入职的时候,办公桌上基本也就一电脑、一键盘、一鼠标,最多再配个杯子。然而混迹职场多年的猿老们,办公桌上都有一些彰显自己斗宗实力的“法器”。 ​ 为什么有些程序员喜欢放一些小物品在桌上?比如这只小黄鸭&…