资讯专栏INFORMATION COLUMN

VUE跨域详解以及常用解决跨域的方法汇总

3403771864 / 1122人阅读

  跨域

  要知道在请求后台接口遇到Access-Control-Allow-Origin 时,这就表明跨域了。

  首先解释跨域,是因为浏览器的同源策略所导致,同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,同源是指:域名、协议、端口相同

1.png

  解决跨域常用方法:

  一、VUE中常用proxy来解决跨域问题

  1、在vue.config.js中设置如下代码片段

  module.exports = {
  dev: {
  // Paths
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  proxyTable: { // 配置跨域
  '/api':{
  target:`http://www.baidu.com`, //请求后台接口
  changeOrigin:true, // 允许跨域
  pathRewrite:{
  '^/api' : '' // 重写请求
  }
  }
  },
  }

  2、创捷axioss实例时,将baseUrl设置为 ‘/api’

  const http = axios.create({
  timeout: 1000 * 1000000,
  withCredentials: true,
  BASE_URL: '/api'
  headers: {
  'Content-Type': 'application/json; charset=utf-8'
  }
  })

  二、JSONP解决跨域

  Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

  <!DOCTYPE html>
  <html>
  <head>
  <meta charset="utf-8">
  </head>
  <body>
  <div id="textID"></div>
  <script type="text/javascript">
  function text_jsonp(req){
  // 创建script的标签
  var script = document.createElement('script');
  // 拼接 url
  var url = req.url + '?callback=' + req.callback.name;
  // 赋值url
  script.src = url;
  // 放入头部
  document.getElementsByTagName('head')[0].appendChild(script);
  }
  </script>
  </body>
  </html>

  三、CORS是跨域资源共享(Cross-Origin Resource Sharing),以 ajax 跨域请求资源,支持现代浏览器,IE支持10以上

  在CORS请求,头部信息中包含以下三个字段:

  Access-Control-Allow-Origin:该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求,

  Access-Control-Allow-Credentials:可选,值为布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true。如果要发送Cookie,Access-Control-Allow-Origin必须设置为必须指定明确的、与请求网页一致的域名

  Access-Control-Expose-Headers:可选。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers就在其中

       四、iframe实现跨域

2.png 

 iframe(src){
  //数组
  if(Array.isArray(src)){
  this.docs.visible = true;
  }else{
  this.docs.visible = false;
  }
  this.link = src
  if(this.docs.visible == false){
  if(this.$refs['ruleIframe'] && this.$refs['ruleIframe'].querySelector('iframe')){
  this.$refs['ruleIframe'].querySelector('iframe').remove() //删除自身
  }
  var iframe = document.createElement('iframe');
  iframe.width = '100%';
  iframe.height = '100%';
  iframe.setAttribute('frameborder','0')
  iframe.src = src;
  this.append(iframe)
  }
  },
  //创建元素 防止 获取不到 ruleIframe 递归
  append(iframe){
  if(this.$refs['ruleIframe']){
  this.$refs['ruleIframe'].appendChild(iframe);
  return
  }
  setTimeout(()=>{
  this.append(iframe);
  },500)
  },

  本篇文章关于VUE跨域详解以及常用解决跨域方法已全部讲述完毕,欢迎大家关注更多后续精彩内容。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128384.html

相关文章

  • 关于跨域

    摘要:服务端接收到请求后,通过该参数获得回调函数名,并将数据放在参数中将其返回收到结果后因为是标签,所以浏览器会当做是脚本进行运行,从而达到跨域获取数据的目的。 在使用Vue搭建的一个后端管理系统中,我使用axios请求本地的Node环境下的接口,但是请求失败,然后我错误信息是:showImg(https://segmentfault.com/img/remote/1460000018521...

    AlexTuan 评论0 收藏0
  • 跨域

    摘要:所谓同源是指协议域名端口三者相同,即便两个不同的域名指向同一个地址,也非同源,看看下面的产生跨域的场景你就会明白同源策略的含义。 前端跨域问题我想很多同学遇到过,或者是刚刚请求数据成功, 然而转眼之后就会报错XMLHttpRequest cannot load http://www.server.com/server.... No Access-Control-Allow-Origin...

    chaos_G 评论0 收藏0
  • 2018年腾讯前端一面总结(面向2019届学生)

    摘要:前言腾讯一面,相比阿里一面来说,腾讯一面先给打电话预定时间,这也给了我们这些面试者去准备的时间。其实闭包也就是指有权访问另一个函数作用域的函数而已。常用的创建闭包的方法就是在函数内部创建另一个函数。 前言 腾讯一面,相比阿里一面来说,腾讯一面先给打电话预定时间,这也给了我们这些面试者去准备的时间。但是也正是因为这种确定性,也有在等待电话的时候的心情的忐忑。 背景 我是一名大三学生,大一...

    Kosmos 评论0 收藏0
  • 高级前端面试题大汇总(只有试题,没有答案)

    摘要:面试题来源于网络,看一下高级前端的面试题,可以知道自己和高级前端的差距。 面试题来源于网络,看一下高级前端的面试题,可以知道自己和高级前端的差距。有些面试题会重复。 使用过的koa2中间件 koa-body原理 介绍自己写过的中间件 有没有涉及到Cluster 介绍pm2 master挂了的话pm2怎么处理 如何和MySQL进行通信 React声明周期及自己的理解 如何...

    kviccn 评论0 收藏0

发表评论

0条评论

3403771864

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<