说说如何利用 Node.js 代理解决跨域问题


Posted in Javascript onApril 22, 2019

前后端分离,经常会出现跨域访问被限制的问题。

跨域访问限制是服务端出于安全考虑的限制行为。即只有同域或者指定域的请求,才能访问。这样还可以防止图片被盗链。服务端(比如 Node.js)可以通过代理,来解决这一问题。

1 安装 request 库

npm install request --save-dev

2 配置

我们以知乎日报为例,配置两个代理。一个代理内容,另一个代理图片。

在项目根目录,配置 proxy.js :

//代理
const http = require('http');
const request = require('request');

const hostIp = '127.0.0.1';
const apiPort = 8070;
const imgPort = 8071;

//创建 API 代理服务
const apiServer = http.createServer((req, res) => {
  console.log('[apiServer]req.url='+req.url);
  const url = 'http://news-at.zhihu.com/story' + req.url;
  console.log('[apiServer]url='+url);
  const options = {
    url: url
  };

  function callback(error, response, body) {
    if (!error && response.statusCode === 200) {
      //编码类型
      res.setHeader('Content-Type', 'text/plain;charset=UTF-8');
      //允许跨域
      res.setHeader('Access-Control-Allow-Origin', '*');
      //返回代理内容
      res.end(body);
    }
  }

  request.get(options, callback);
});

//监听 API 端口
apiServer.listen(apiPort, hostIp, () => {
  console.log('代理接口,运行于 http://' + hostIp + ':' + apiPort + '/');
});

//创建图片代理服务
const imgServer = http.createServer((req, res) => {
  const url = 'https://pic2.zhimg.com/' +req.url.split('/img/')[1];
  console.log('[imgServer]url=' + url);
  const options = {
    url: url,
    encoding: null
  };

  function callback(error, response, body) {
    if (!error && response.statusCode === 200) {
      const contentType = response.headers['content-type'];
      res.setHeader('Content-Type', contentType);
      res.setHeader('Access-Control-Allow-Origin', '*');
      res.end(body);
    }
  }

  request.get(options, callback);


});

//监听图片端口
imgServer.listen(imgPort, hostIp, () => {
  console.log('代理图片,运行于 http://' + hostIp + ':' + imgPort + '/')
});

代理的关键点是在响应头添加 Access-Control-Allow-Origin 为 *,表示允许所有域进行访问。

代理前地址 代理后地址
https://pic2.zhimg.com/v2-bb0a0282fd989bddaa245af4de9dcc45.jpg http://127.0.0.1:8071/img/v2-bb0a0282fd989bddaa245af4de9dcc45.jpg
http://news-at.zhihu.com/story/9710345 http://127.0.0.1:8070/9710345

3. 运行

执行:

node proxy.js

 运行结果:

代理接口,运行于 http://127.0.0.1:8070/代理图片,运行于http://127.0.0.1:8071/

打开浏览器,输入代理后的地址,就可以正常访问啦O(∩_∩)O哈哈~

代理内容:

说说如何利用 Node.js 代理解决跨域问题

代理图片:

说说如何利用 Node.js 代理解决跨域问题

以上所述是小编给大家介绍的Node.js代理解决跨域问题详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
调用js时ie6和ie7,ff的区别
Aug 19 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 25 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
Mar 25 jQuery
jQuery中$原理实例分析
Aug 13 jQuery
微信小程序时间选择插件使用详解
Dec 28 Javascript
详解一个小实例理解js原型和继承
Apr 24 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
javascript实现时钟动画
Dec 03 Javascript
详解Vue中使用Axios拦截器
Apr 22 #Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 #Javascript
vue 项目build错误异常的解决方法
Apr 22 #Javascript
js实现web调用摄像头 js截取视频画面
Apr 21 #Javascript
今天,小程序正式支持 SVG
Apr 20 #Javascript
详解Vue中组件的缓存
Apr 20 #Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
Apr 20 #Javascript
You might like
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
asm.js使用示例代码
2013/11/28 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
python如何重载模块实例解析
2018/01/25 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
JAVA软件工程师测试题
2014/07/25 面试题
函授自我鉴定
2013/11/06 职场文书
开业庆典答谢词
2014/01/18 职场文书
寄语十八大感言
2014/02/07 职场文书
致接力运动员广播稿
2014/02/17 职场文书
父亲节活动策划方案
2014/08/24 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
教育见习报告范文
2014/11/03 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
MySQL开启事务的方式
2021/06/26 MySQL