位置: IT常识 - 正文

Vue实战——使用代理服务器解决跨域问题——No‘Access-Control-Allow-Origin‘ header is present on the requested resource(vue用法)

编辑:rootadmin
Vue实战——使用代理服务器解决跨域问题——No‘Access-Control-Allow-Origin‘ header is present on the requested resource

推荐整理分享Vue实战——使用代理服务器解决跨域问题——No‘Access-Control-Allow-Origin‘ header is present on the requested resource(vue用法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue的简单使用,vue使用key,vue使用rem,vue使用教程,vue的简单使用,vue的简单使用,vue的简单使用,vue 使用,内容如对您有帮助,希望把文章链接给更多的朋友!

概论:

目录

一、跨域问题是怎么产生的

1.1 跨域问题:

1.2 解决办法

三、开启代理服务器

第一种方式:(存在弊端)

细节问题:(解释两个弊端)

第二种方式:(重要)

配置多个代理


一、跨域问题是怎么产生的

违背同源策略。协议,域名(主机名),端口有一个不同就是跨域。

比如在我的电脑上,我使用localhost:8080端口请求localhost:5000端口获取数据,这样的话就会出现跨域问题,如下图所示:这种情况是端口号不同

getStudents(){ axios.get('http://localhost:5000/students') .then( response=>{ // response是响应对象 response.data才是服务器给我们的东西 !!! 很重要 console.log('请求成功了',response.data) }, error =>{ // 这个地方输出error也可以 error.message是具体的原因 console.log('请求失败了了',error.message) } ) },

1.1 跨域问题:

把下面的8080端口想象成我们的前端工作人员

如上图所示 在8080端口向5000端口(服务器)发送请求且已经送到了5000端口(服务器),5000端口(服务器)收到请求后也把8080端口想要的数据交给他,但是浏览器并没有进一步的展示出来,因为浏览器发现跨域了,数据就被浏览器拿在手里不进行展示了。

 请求是可以发过去的!!!!!一定要注意!服务器也受到请求并且返回数据了!!!!只是浏览器发现是跨域,将请求来的时候握在手里不展示!!

那怎么证明服务器收到请求并且响应了?

如下图所示,当我们请求5000端口的时候,服务器是有响应的

1.2 解决办法

解决跨域:

        1.代理服务器  (用的比较多)

         2.JSONP     

           借助Script标签的src属性,在引入外部资源的时候不受同源策略限制做到的,真正开发用的很少,因为这个地方得前后端人员一起使用,只能解决get请求的跨域问题,很鸡肋但是很巧妙

        3.让后端改cors,携带特殊响应头(真正意义解决跨域)

           但是真实的开发中,响应头不是随便配置的,配置了的结果就是任何人都能找你要数据

下面我们就来介绍一下第一种方法:使用代理服务器解决跨域问题

那我们怎么理解代理服务器(粉色)呢?

      房主中介的作用,左手顾客,右手房东

       类似中间人,本身也是服务器。8080是我们目前所处在的位置(红色),代理服务器和我们处在的位置一个样,也是8080,始终保持一致

当我们在8080(红色)端口向5000端口索要数据的时候,并不会直接发送给5000端口(服务器),而是先发送给代理服务器(粉色8080),然后粉色的代理服务器反手把这次请求发送给了5000;之后5000端口收到代理服务器的请求之后把数据响应给了粉色代理服务器,然后粉色代理服务器又给了红色8080端口,最后红色的8080端口(服务器)接收到响应回来的数据。

 但是有同学会想:那粉色代理服务器8080向5000端口(服务器)发送请求,那不是也跨域么?

       粉色的是代理服务器,蓝色的5000也是服务器,服务器和服务器之前不用ajax打交道用的是http,所以同源策略根本管不到代理服务器与5000之前的请求与响应

借助vue-cli开启代理服务器

我们也可以使用Nginx开启代理服务器,但是是在后端也比较麻烦,在这里我们就是用Vue脚手架开启代理服务器即可,比较方便好用,也特别简单

一定要记得代理服务器的端口号要和我们保持一致!!!比如说,我们如果向localhost:5000要数据,那我们就不要写5000了,而是要写localhost:8080,因为我们开启了代理服务器,要和我们保持一致

三、开启代理服务器

我们在哪个地方开启代理服务器呢?

Vue实战——使用代理服务器解决跨域问题——No‘Access-Control-Allow-Origin‘ header is present on the requested resource(vue用法)

    vue.config.js文件

第一种方式:(存在弊端)

    注意!在proxy中不要写具体的路径,写到端口号即可,不用写后面的/students!!!!

   这样写之后一个粉色的代理服务器就开启了,但是我们在使用之前,记得把脚手架给重启,因为我们修改了配置

// 开启代理服务器 devServer:{ proxy:'http://localhost:5000' }

下面的端口号也要改,我们最开始的时候是向5000索要数据,存在跨域问题,现在我们开启了一个粉色的代理服务器,而且代理服务器的端口和我们一致,所以我们写8080就好了

getStudents(){ axios.get('http://localhost:8080/students') .then( response=>{ // response是响应对象 response.data才是服务器给我们的东西 !!! 很重要 console.log('请求成功了',response.data) }, error =>{ // 这个地方输出error也可以 error.message是具体的原因 console.log('请求失败了了',error.message) } ) },细节问题:(解释两个弊端)

    1.不能灵活的控制能不能走代理

代理服务器8080并不是把所有的请求都转发给5000,当请求的资源8080就有,这个时候就不会把请求转发给5000(人之常情,很好理解)

     这个public文件夹就相当于我们服务器的根路径,public中有的就相当于我们现在8080有的

比如说我们在这个文件夹下新建一个text.txt文件

 然后我们就在浏览器中进行访问,很顺利的拿到了数据

接下来我们在public中创建一个同名文件

然后再发起请求,我们发现我们所要的请求数据变了,不是刚刚的我们从5000中获得的数据,而是实实在在public文件夹下students文件中的数据

2.第二个弊端就是只能配置一个代理

第二种方式:(重要)

'/api':在我们第一种方式的时候存在一个弊端,就是我们不能灵活的操控时候走代理,但是在我们第二种方式中就可以,在我们下段代码中我们发现有'/api',他的作用就是灵活的控制是否走代理

当我们的8080端口发送请求的时候,代理服务器就会问:本次请求的前缀是/api么?  如果是的话就转发到5000,不是的话就不走代理(也可以把api改成别的名字,比如可以改成atguigu)

target的作用就是写我们真实的请求地址

ws是用于支持websocket,客户端和服务器的一种通信方式

changeOrigin:

       true:不会如实回答自己的端口号是8080   假设对面是5000 我们请求之后这个代理服务器告诉他我也是5000 但是其实并不是(骗人)

      false:会如实回答自己的端口号8080,  不会欺骗5000说自己是5000端口(诚实)

      这个地方是true撒谎好,以防5000端口号做限制不让别的端口访问

devServer:{ proxy:{ // '/api'是请求前缀 '/api':{ target:'http://localhost:5000', ws:true, changeOrigin:true } } }

那么我们axios发起请求的路径也应该有所改变 ,一定是在端口号后面添加

   加前缀就走代理,不加前缀就不走代理

axios.get('http://localhost:8080/atguigu/students')

当我们发起请求后又出现了下面的错误:

 原因:8080向代理服务器索要数据时带着atguigu,进而代理服务器向5000索要数据的时候也带着atguigu,这样就导致了上图中的404(5000中没有atguigu这个路径)

怎么解决?

由代理服务器向5000发送请求时不应该再带着atguigu

添加:   pathRewrite:{'^/atguigu':''},  其中pathRewrite中是用键值对的方式存在的,左侧是正则的匹配条件(匹配所有的atguigu),右边是匹配完了之后编程右边的空白字符串就可以了( 将atguigu字符串转化成空白字符串)

devServer:{ proxy:{ // '/api'是请求前缀 '/atguigu':{ target:'http://localhost:5000', pathRewrite:{'^/atguigu':''}, ws:true, changeOrigin:true } } }配置多个代理 '/atguigu':{ target:'http://localhost:5000', pathRewrite:{'^/atguigu':''}, ws:true, changeOrigin:true }, '/demo':{ target:'http://localhost:5001', pathRewrite:{'^/demo':''}, ws:true, changeOrigin:true }
本文链接地址:https://www.jiuchutong.com/zhishi/296074.html 转载请保留说明!

上一篇:VSCode插件推荐(vscode插件大全)

下一篇:[Vue]Vue3学习笔记(尚硅谷)

  • 运营,当你面对业务与职业发展的双重困惑(当前运营工作中遇到的困难)

    运营,当你面对业务与职业发展的双重困惑(当前运营工作中遇到的困难)

  • 计算器的clock键是什么键(计算器lock键是什么意思)

    计算器的clock键是什么键(计算器lock键是什么意思)

  • 荣耀9x充电器头型号(华为荣耀9x充电器头)

    荣耀9x充电器头型号(华为荣耀9x充电器头)

  • 抖音pk过的人怎么才能找得到(抖音pk可以找到记录吗)

    抖音pk过的人怎么才能找得到(抖音pk可以找到记录吗)

  • word哪个版本免费(目前word最常用版本免费好用)

    word哪个版本免费(目前word最常用版本免费好用)

  • 安卓rom是什么(安卓rom包下载专区)

    安卓rom是什么(安卓rom包下载专区)

  • 快手拉黑再移出对方知道吗(快手拉黑再移出来就不是我的粉丝了)

    快手拉黑再移出对方知道吗(快手拉黑再移出来就不是我的粉丝了)

  • beautycam水印是什么相机(camhomme水印是什么相机)

    beautycam水印是什么相机(camhomme水印是什么相机)

  • 华为手机怎么退出盲人模式怎么解除(华为手机怎么退出屏幕朗读模式)

    华为手机怎么退出盲人模式怎么解除(华为手机怎么退出屏幕朗读模式)

  • 十分钟视频怎么发微信(十分钟视频怎么发微信朋友圈)

    十分钟视频怎么发微信(十分钟视频怎么发微信朋友圈)

  • 苹果卡贴机信号不稳定怎么办(苹果卡贴机信号显示LTE)

    苹果卡贴机信号不稳定怎么办(苹果卡贴机信号显示LTE)

  • wifi低安全性什么意思(wifi低安全性如何解决)

    wifi低安全性什么意思(wifi低安全性如何解决)

  • p30pro有没有5g(p30pro支持红外线遥控吗)

    p30pro有没有5g(p30pro支持红外线遥控吗)

  • 苹果软件自动扣费能不能申请退款(苹果软件自动扣钱了怎么退款)

    苹果软件自动扣费能不能申请退款(苹果软件自动扣钱了怎么退款)

  • oppo手机怎么隐藏软件(oppo手机怎么隐藏图标)

    oppo手机怎么隐藏软件(oppo手机怎么隐藏图标)

  • vivo储存空间权限在哪打开(vivox7存储权限)

    vivo储存空间权限在哪打开(vivox7存储权限)

  • 更新ios13怎么退回12(怎么退回ios13.6)

    更新ios13怎么退回12(怎么退回ios13.6)

  • 快手可以私密评论吗(快手私密评论回复别人能看到吗)

    快手可以私密评论吗(快手私密评论回复别人能看到吗)

  • 爱奇艺登录多久会失效(爱奇艺登录多久需要验证登录)

    爱奇艺登录多久会失效(爱奇艺登录多久需要验证登录)

  • 云闪付app扫一扫在哪里(云闪付app扫一扫能扫支付宝吗)

    云闪付app扫一扫在哪里(云闪付app扫一扫能扫支付宝吗)

  • 交了网费怎么恢复wifi(交完网费怎么重新登录)

    交了网费怎么恢复wifi(交完网费怎么重新登录)

  • 10660911定位怎么发(定位怎么操作的)

    10660911定位怎么发(定位怎么操作的)

  • cltal01华为什么型号(华为clt-tl01)

    cltal01华为什么型号(华为clt-tl01)

  • 小米8拍照怎么去水印(小米8拍照怎么样)

    小米8拍照怎么去水印(小米8拍照怎么样)

  • 零钱通怎么转出(零钱通怎么转出到银行卡要手续费吗)

    零钱通怎么转出(零钱通怎么转出到银行卡要手续费吗)

  • 前后端分离项目,如何解决跨域问题?(前后端分离项目部署到服务器)

    前后端分离项目,如何解决跨域问题?(前后端分离项目部署到服务器)

  • 一个人可以做多少家公司法人
  • 可转债中签后怎么操作卖出
  • 签三方协议需要什么资料
  • 使用党费要向哪里倾斜
  • 以前年度多计成本,本年度冲减成本
  • 企业购入投资性房地产
  • 代扣代缴附加税怎么做账
  • 购买税控设备怎么抵扣
  • 销售货物类型
  • 所得税费用税率规定
  • 税务实名制法人和财务负责人可以是同一人吗?
  • 清包工程增值税税率
  • 增值税发票税率是星号
  • 企业为员工提供住宿会计科目
  • 商品流通企业批发销售会计分录
  • 奖励费收入是什么
  • 清卡信息还未生成请稍后再试什么意思
  • 教育费附加免征还计提吗
  • 工会经费缴纳是当期
  • 礼品发票怎么入账
  • 对研发机构采购国产设备,全额退还增值税
  • 专用发票增量申请流程
  • 未售车位出租有哪些税要缴纳
  • PHP:token_get_all()的用法_Tokenizer函数
  • 无形资产处置收入计入
  • 弃置费用的会计处理
  • 收车船税是什么
  • 定额材料损耗的计算公式
  • 销售费用期末余额
  • 股权转让实操
  • 微信小程序解锁安全吗
  • 什么是微前端
  • php教程从入门到精通
  • 社保新参统委托代发银行
  • 利润分配和所有权的关系
  • 拆迁补偿账务处理办法
  • 织梦cms怎么样
  • 交易性金融资产的入账价值
  • 借款可以抵货款吗
  • 单一窗口出口报关流程
  • 在建工程核算的内容有哪些
  • 附加税减免额怎么算
  • 公司申请破产后员工有赔偿吗
  • 购入固定资产入账会计凭证怎么做
  • 低值易耗品的账务处理图片
  • 增值税直接计算法间接计算法举例
  • 交易性金融资产的入账价值
  • 管理费用算营业外支出吗
  • 事业单位的结余与企业的利润相比
  • 长期股权投资稀释股权
  • 外籍人员个税汇算清缴流程
  • 为什么自创商誉不能确认
  • 场地租赁都需要交什么税
  • 小规模纳税人季度申报哪些税
  • 总分类账,明细分类账,日记账
  • 劳动就业失业金怎么申请
  • ubuntu16.04.7
  • win7回收站路径在哪里
  • win10防火墙打不开错误代码
  • win8系统分辨率调不了
  • macos使用方法
  • linux shell命令大全
  • linux收发邮件
  • windows10总是弹出用户账户控制
  • node.js批量添加数据
  • html5的全局属性
  • html文件怎么用ie浏览器打开
  • perl语言
  • nodejs 函数
  • [置顶]星陨计划
  • 手游云测试工具有哪些
  • python数据通信
  • Python的for和in
  • 销售农药化肥的经营范围
  • 陕西电子税务局新版
  • 广西地方税务局决算公开表
  • 附加税申报表怎么做
  • 广东税务查询系统
  • 遏制新增
  • 享受税收优惠影响就业吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设