解决跨域、同源策略-React中代理的配置
React中代理的配置
主要是解决同源策略的问题
何为同源策略?
因为我们React在3000端口,Vue在8080端口,而后台接口往往在5000,这种不同的端口之间就是一种跨域的问题了
axios发送跨域请求的时候,实际上是有访问后台,并且从后台拿到了数据,只是这些数据回不了,因为ajax疫情拦截了
如何解决呢?
使用代理:
①代理的端口和前端的端口是一样的(也就是下面的3000端口跑了一个脚手架,并且也运行了一个微小的代理服务器)
②代理为什么能够请求别的端口的服务器是因为 代理服务器上面没有ajax引擎(因为产生跨域是因为ajax引擎把请求拦住了,
而我们的代理就是基于没有ajax引擎,来进行转发的,所以代理拿到数据之后,因为和脚手架钱都都在同一个端口
所以,脚手架的ajax引擎就允许接收这个数据了
在React中如何实现?
在react中有两种方式可以开启
方法一:在package.js中设置proxy代理
在package.json 中设置 "proxy": "http://localhost:5000",并重启脚手架
====这个相当于就是把所有给3000端口发的请求,都转发给了5000端口
但是代码中,我们写后台接口的时候,要写3000端口,而不是写5000(虽然我们后台在5000端口,但是我们这里设置了把3000端口发的请求转发到5000端口,其实就相当于这个localhost:3000就是和前端同一个端口的微型代理服务器,这个服务器会把我们给他的请求转发到5000端口中的后台接口中
getStudentData = () => {
axios.get('http://localhost:3000/students').then(
response => {console.log('成功了', response.data);},
error => {console.log('getStudentData方法失败了', error)}
)
}
注意点:
如果写成 axios.get('http://localhost:3000/index.html') 这个请求并不会向5000端口发送,因为本地的public代表的就是3000端口,因为public有index.html,所以本地有的了,就不会和服务器请求了
假如本地没有并且代理中转发给的服务器(5000)的也没有,那么就会报错404了
缺点:就是只能配置一个服务器端口,3000没有就找5000,那假如又另外一个5001端口的服务器呢?
这个时候就引入了第二种方法(为了配置多个端口的后台接口)
方法二:多后台接口代理配置
如果有多个服务器的话,就不能只是在packge.json中配置了
在src目录下,新建一个 setupProxy.js 文件(名字不能更改)
并且这个文件不能用ES6规范,而是要用CJS(commonJS)(因为这个文件不是给前端执行的,而是React会把这个文件加到webpack的配置文件里面,webpack里面用的是CJS的语法规范的)
const proxy = require('http-proxy-middleware')
module.exports = function(app) {
app.use(
proxy('/api1', {
target: 'http://localhost:5000',
changeOrigin: true,
pathRewrite: {'^/api1': ''}
}),
proxy('/api2', {
target: 'http://localhost:5001',
changeOrigin: true,
pathRewrite: {'^/api2': ''}
})
)
}
解释:
如果不加/api1,那么就没有机会把请求发给5000,加了之后,也要进行消去
所以就通过pathRewrite来消去
全部的该前缀的请求都会被转发到目标服务器
changeOrigin: true, // 控制服务器收到的响应头中Host字段的值(host表示请求从哪发出来的),如果没加服务器那边的host显示从3000端口来的,如果加了就显示从5000端口来的(也就是欺骗服务器,我和你在同一个端口,你要给我数据)
所以请求的代码格式就是:
getStudentData = () => {
axios.get('http://localhost:3000/api1/students').then(
response => {console.log('成功了', response.data);},
error => {console.log('getStudentData方法失败了', error)}
)
}
相关注意事项:
要么前端通过两个方式解决,要么就后端通过cors来解决跨域问题(但是其实真正用cors解决跨域的网站很少,存在安全性问题)
注意了这个前缀api1一定要跟着3000的后面才行~
解决跨域、同源策略-React中代理的配置的更多相关文章
- vue cli 解决跨域 线上 nginx 反向代理配置
前后分离 axios 接 api 跨域问题如图: 解决办法: 1. npm start 本地开发环境解决: 在webpack配置文件 /config/index.js 里找到 proxyTable 开 ...
- Vue-cli 创建的项目配置跨域请求(通过反向代理)---配置多个代理--axios请求
问题描述: 使用 Vue-cli 创建的项目,开发地址是 localhost:8080,需要访问 localhost:9000 或https://m.maoyan.com或http://image.b ...
- 前端通过Nginx反向代理解决跨域问题
在前面写的一篇文章SpringMVC 跨域,我们探讨了什么是跨域问题以及SpringMVC怎么解决跨域问题,解决方式主要有如下三种方式: JSONP CORS WebSocket 可是这几种方式都是基 ...
- 前端解决跨域问题的终极武器——Nginx反向代理
提到代理,分为:正向代理和反向代理. 正向代理:就是你访问不了Google,但是国外有个VPN可以访问Google,你访问VPN后叫它访问Google,然后把数据传给你. 正向代理隐藏了真实的客户端. ...
- windows环境下 nginx+iis 反向代理解决跨域问题
项目基本完成,是时候花点时间整理一下最近的姿势了 1 什么是跨域? 网上对于跨域的概念会有大篇幅的文章去解释,似乎有点玄乎,初学者很容易对这个概念产生恐惧,跨域其实很简单,其实只要知道一点,无法跨域访 ...
- Nginx 反向代理解决跨域问题分析
当你遇到跨域问题,不要立刻就选择复制去尝试.请详细看完这篇文章再处理 .我相信它能帮到你. 分析前准备: 前端网站地址:http://localhost:8080 服务端网址:http://local ...
- axios解决跨域问题(vue-cli3.0)
一.什么是跨域 1.跨域 指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 2.同源策略 是指协议,域名,端口都要相同,其中有一个不同都 ...
- 【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作
什么是跨域 跨域,它是不同的域名(服务器)之间的相互的资源之间的访问. 当协议,域名,端口号任意一个不同,它们就是不同的域. 正常情况下,因为浏览器安全的问题,不同域之间的资源是不可以访问的. 跨域的 ...
- 无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离
近年来,前后端分离已经成为中大型软件项目开发的最佳实践. 在技术层面,前后端分离指在同一个Web系统中,前端服务器和后端服务器采用不同的技术栈,利用标准的WebAPI完成协同工作.这种前后端分离的&q ...
随机推荐
- pikachu 目录遍历 敏感信息泄露
目录遍历漏洞概述在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执 ...
- pikachu 不安全的url跳转
不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生&q ...
- 玩转Spring生命周期之Lifecycle
Lifecycle callbacks Initialization callbacks.Destruction callbacks要与容器的bean生命周期管理交互,即容器在启动后和容器在销毁前对每 ...
- YARN的工作过程
yarn的工作执行流程图 1.用户向YARN中提交应用程序 2.ResourceManager为该应用程序找到一个可用的NodeManager 并分配一个Container,然后在这个Containe ...
- Vue.JS快速上手(组件生命周期)
一.什么是组件 组成网页独立功能基本单元(片段), 复用.维护.性能, Vue.js中的组件就是一个Vue的实例,Vue中的组件包含data/methods/computed. 一个Vue.js的应用 ...
- python实现分水岭算法分割遥感图像
1. 定义 分水岭算法(watershed algorithm)可以将图像中的边缘转化为"山脉",将均匀区域转化为"山谷",在这方面有助于分割目标. 分水岭算法 ...
- java 集合特性面试必备
collection 集合体系 数据结构栈和队列栈结构 :先进后出队列结构 :先进先出 数据结构之数组和链表数组结构:查询快.增删慢队列结构 :查询慢.增删快 List集合概述有序集合(也称为序列), ...
- 史上最详细的信号使用说明(已被收藏和N次)
Unix环境高级编程(第三版) 第10章 信号 文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 ...
- token过期时间
token有两个有效期,在config/jwt.php下面 # ./config/jwt.php'ttl' => env('JWT_TTL', 600), ##600min=10h 'refre ...
- Delphi使用Zxing创建二维码
效果 DelphiZXingQRCode下载地址:https://www.debenu.com/open-source/delphizxingqrcode/ 为了调用方便unit DelphiZXIn ...