业务描述:

1。web前端发送http请求

2。web后端为https协议

如何保证web前端发送http请求到web后端(跨域问题:域名不一致即跨域),

因此用node.js写了个代理服务,转发前端http请求到后端,再获取后端数据返回给前端。

代码如下所示:

 'use strict';

 const express = require('express');
const fs = require('fs');
const path = require('path');
const https = require('https');
const http=require('http');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const app = express();
const url = require("url");
app.use(cookieParser());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json()); //设置跨域访问
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header('Access-Control-Allow-Credentials', true);
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
if (req.method == "OPTIONS") res.send();
else next();
});
// Https代理请求
app.post('/rancher', function(req1, res1) {
let urlbody=url.parse(req1.body.url)
console.log("urlbody=========");
console.log(urlbody);
let postData =req1.body.postData||'';
var opts = {
method:req1.body.type,
host:urlbody.host,
port:urlbody.port||'',
// path:urlbody.path+(urlbody.search||''),
path:urlbody.path,
headers:{
'Content-Type':'application/json',
'Content-Length':postData.length,
'Authorization':'Basic xx',
'Cookie':'',
'Cluster-id':req1.body.cid||''
},
rejectUnauthorized:false
}
console.log("opts=========");
console.log(opts);
var req = https.request(opts,function(res){
var datas = [];
var size = ;
res.on('data',function(data){
datas.push(data);
size += data.length;
})
res.on('end', function(){
var buff = Buffer.concat(datas, size);
console.log('success'+datas);
res1.send(buff);
})
})
req.on('error',function(err){
console.log('异常,异常原因'+err);
})
if (req1.body.type!="get") {
req.write(postData);
}
req.end(); }); // Http代理请求
app.post('/http/rancher', function(req, res1) {
let urlbody=url.parse(req.body.url)
console.log("urlbody=========");
console.log(urlbody);
let postData =req.body.postData||'';
//发送 http Post 请求
var opts = {
method:req.body.type,
host:urlbody.hostname,
port:urlbody.port&&urlbody.port||'',
path:urlbody.path,
headers:{
'Content-Type':'application/json',
'Content-Length':postData.length,
'Authorization':'Basic xx',
'Cookie': 'xx',
},
}
var req=http.request(opts, function(res) {
console.log('Opts:',opts);
console.log('Status:',res.statusCode);
console.log('headers:',JSON.stringify(res.headers));
res.setEncoding('utf-8');
res.on('data',function(chun){
console.log('body分隔线---------------------------------\r\n');
console.info(chun);
res1.send(chun);
});
res.on('end',function(){
console.log('No more data in response.********');
});
});
req.on('error',function(err){
console.error(err);
});
req.write(postData);
req.end();
}); let server = app.listen(, function() {
let host = server.address().address;
let port = server.address().port; console.log('Example app listening at http://%s:%s', host, port);
});

003/node.js--代理服务(解决跨域问题)的更多相关文章

  1. Nginx反向代理和Node.js后端解决跨域问题

    最近在写自己的博客,涉及到跨域的问题,自己捣鼓许久,终于解决了.然后总结一下,记录一下,日后遇到类似的问题的时候也可以得到一些启发. 一.什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏 ...

  2. Node.js实现CORS跨域资源共享

    什么是CORS CORS(Cross-origin resource sharing),跨域资源共享,是一份浏览器技术的规范,用来避开浏览器的同源策略 简单来说就是解决跨域问题的除了jsonp外的另一 ...

  3. [转] js前端解决跨域问题的8种方案(最新最全)

    1.同源策略如下: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.j ...

  4. NodeJ node.js Jquery Ajax 跨域请求

    Jquery + Ajax 跨域请求 说白了就是前台请求ajax数据(JSON)但是请求的数据不在本地的绝对路径下,接口数据 是没有这个安全性的我对外公开的接口数据,只要你找到接口你就可以使用里面的数 ...

  5. vue.js vue-jsonp解决跨域问题

    安装jsonp npm install vue-jsonp --save main.js中引入 import VueJsonp from 'vue-jsonp' Vue.use(VueJsonp) 组 ...

  6. vue.js 本地解决跨域

    1.config/index.js下添加proxyTable dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', ...

  7. 搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理

    什么是跨域 跨域:一个域下的文档或脚本试图去请求另一个域下的资源 广义的跨域包含一下内容: 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源请求(内部的引用,脚本script,图片img,fr ...

  8. 后台访问 JS解决跨域问题

    今天看了看以前做的一个小项目(其实就是一个页面),分享一下当时解决跨域问题的: 背景:公司把项目部署在多台服务器上,防止一台服务器崩溃后,其他的可以继续访问,对应本公司来说,某台服务器出问题后,技术人 ...

  9. js中ajax如何解决跨域请求

    js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...

  10. NODE中解决跨域请求的问题

    1.Node Express 解决请求跨域请求 标签(空格分隔): 跨域 1是Access-Control-Allow-Origin 允许的域 2是Access-Control-Allow-Heade ...

随机推荐

  1. 隐藏系统和 Apache 的版本信息

    方法一: ※首先修改源文件,再进行 make && make install 编译安装 编辑源文件/usr/local/apache2/include/ap_release.h 文件 ...

  2. pip install mysql_python报错解决办法

    首先请注意,mysql_python只支持Python2,所以假如你是python3,就直接用python-connector去吧.下面这一条命令就可以了 pip install mysql-conn ...

  3. css 3D动画

    一.今天让我们来学习一下css 3D吧! 1.首先我们要学习好css3 3d一定要有一定的立体感! 2.再来那就聊聊原理吧! 3.css3 3d 顾名思义是由两个2d名片组成的 但不是让你建立连个2d ...

  4. 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)

    其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用核心就是用localStorage存.取数据,这样 ...

  5. SpringCloud学习系列-Eureka自我保护模式(5)

    什么是自我保护模式? 默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒).但是当网络分区故障发生时,微服务与Eur ...

  6. CSS——相对定位、绝对定位、固定定位

    相对定位: position:relative 当元素被设置相对定位或是绝对定位后,将自动产生层叠,他们的层叠级别自然的高于文本流,除非设置其z-index值为负值. 并且我们发现当相对定位元素进行位 ...

  7. 【leetcode】1143. Longest Common Subsequence

    题目如下: Given two strings text1 and text2, return the length of their longest common subsequence. A su ...

  8. 循环结构for语句-求和思想

    循环结构for语句的练习-求和思想:需求1:求出1到10之间的数据和 public static void main(String[] args) { int sum = 0; for(int i = ...

  9. 【java工具类】AES加密解密

    百度百科一下,AES:高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准 ...

  10. PHP文件的上传和下载

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...