vue前端跨域解决方案有哪些_前端能完全解决跨域问题吗

vue前端跨域解决方案有哪些_前端能完全解决跨域问题吗为什么会出现跨域:浏览器访问非同源的网址时,会被限制访问,出现跨域问题.常见的跨域有三种:jspn跨域,原理:动态生成script标签,通过script标签引入接口地址(因为script标签不存在跨域的)cors跨域(后端开启):全称“跨域资源共享”,原理:它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制vue代理服务器proxy跨域:通过请求本地的服务器,然后本地的服务器再去请求远程的服务器(后端部署接口的服务器),最后本地服务器再将请求

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

为什么会出现跨域:

浏览器访问非同源的网址时,会被限制访问,出现跨域问题.

常见的跨域有三种:
  • jspn跨域,原理:动态生成script标签,通过script标签引入接口地址(因为script标签不存在跨域的)
  • cors跨域(后端开启) :全称 “跨域资源共享”,原理:它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制
  • vue代理服务器proxy跨域:通过请求本地的服务器,然后本地的服务器再去请求远程的服务器(后端部署接口的服务器),最后本地服务器再将请求回来的数据返回给浏览器(本地服务器和浏览器之前不存在跨域)
    两个关键点:
    本地服务器(利用node.js创建的本地服务器进行代理,也叫代理服务器)和浏览器之间不存在跨域
    服务器和服务器之间不存在跨域
话不多说,直接上代码:

首先创建一个 vue.config.js文件

// 假设要请求的接口是:http://40.00.100.100:3002/api/user/add
module.exports = { 
   
    devServer:{ 
   
      host:'localhost',  // 本地主机
        port:5000,  // 端口号的配置
        open:true,  // 自动打开浏览器
        proxy:{ 
   
          '/api': { 
      // 拦截以 /api 开头的接口
            target: 'http://40.00.100.100:3002',//设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true,    //这里true表示实现跨域
            secure: false, // 如果是https接口,需要配置这个参数
            pathRewrite: { 
   
              '^/api':'/'  //这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/api/user/add',直接写‘/api/user/add’即可
            }
          },
    // 假如又有一个接口是:http://40.00.100.100:3002/get/list/add
    // 那就再配置一个 get的,如下:
          '/get': { 
      // 拦截以 /get 开头的接口
            target: 'http://40.00.100.100:3002',//设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true,    //这里true表示实现跨域
            secure: false, // 如果是https接口,需要配置这个参数
            pathRewrite: { 
   
              '^/api':'/'  //这里理解成用‘/api’代替target里面的地址,
            }
          }
			// 调用的时候直接 /get/list/add 就可以了
        }
    }
  }

  // 注意:修改了配置文件后一定要重启才会生效;

我们可以利用axios的baseUrl直接默认值是 api,这样我们每次访问的时候,自动补上这个api前缀,就不需要我们自己手工在每个接口上面写这个前缀了
在入口文件里面配置如下:

import axios from 'axios'

Vue.prototype.$http = axios
axios.defaults.baseURL = 'api'  // 后面发现,其实不加这个感觉也好像可以

如果这配置 'api/' 会默认读取本地的域

如果只是开发环境测试,上面那种就足够了,如果区分生产和开发环境
就需要如下配置

分环境配置跨域:

创建一个 api.config.js 文件(其实随便命名都可以)

const isPro = Object.is(process.env.NODE_ENV, 'production')
// 如果是生产环境,就用线上的接口;
module.exports = { 
   
    baseUrl: isPro ? 'http://www.vnshop.cn/api/' : 'api/'
}

然后在main.js 里面引入,这样可以保证动态的匹配生产和开发的定义前缀

import apiConfig from './api.config'

Vue.prototype.$http = axios
import axios from 'axios'

axios.defaults.baseURL = apiConfig.baseUrl

经过上面配置后,在dom里面可以这样轻松的访问,也不需要在任何组件里面引入axios模块了

  async getData(){ 
   
        const res = await this.$http.get('/api/user/add');
        console.log(res);
    },

小结:
代理跨域的主要方式是利用服务器请求服务器的方式避过跨域问题来实现的.大概的流程: 浏览器===>代理服务器===>目标服务器.

若有不对的地方,请不吝指出,同时也欢迎留言咨询,谢谢~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187012.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux版navicat安装和激活成功教程「建议收藏」

    linux版navicat安装和激活成功教程「建议收藏」 原 linux版navicat安装和激活成功教程 2017年09月27日10:27:00 ispotu 阅读数:30819 <spanclass="tags-boxartic-tag-box"&a

  • 基本知识 100136

    基本知识 100136基本知识100136单选题A11.疑为多囊卵巢综合征,行超声检查的最佳时间是pcos超声检查在月经周期或黄体酮撤退后出血的3~5日进行,显示卵巢体积增大,双侧卵巢均有ge;12个直径2~9mm的小卵泡,即卵巢多囊改变。答案:(D)A:月经期B:月经来潮6小时内C:月经前数日D:月经周期的3~5日E:排卵期单选题A12.关于萎缩性阴道炎,叙述正确的是答案:(C)A:萎缩性阴道炎仅见于绝经后女性B:萎缩性阴道炎阴道pH

  • 表单提交时验证数据是否为空[通俗易懂]

    表单提交时验证数据是否为空[通俗易懂]一、利用submit按钮实现提交,当点击submit按钮时,触发onclick事件,由JavaScript里函数判断输入内容是否为空,如果为空,返回false,不提交,如果不为空,提交到由action指定的地址。<scripttype=”text/javascript”>functioncheck(form){if(form…

  • Git安装配置教程

    Git安装配置教程1.Git简介Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理1。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。2.Git工作示意图3.Windows下安装Git3.1Git下载下载地址:https://git-for-windows.github.io/下载有时候很慢,请耐心

  • 用python生成一个导出数据库的bat脚本文件

    推荐:http://www.cnblogs.com/roucheng/p/pythonyunsuan.html

    2021年12月25日
  • qq浏览器手动屏蔽广告_qq好友屏蔽你的特征

    qq浏览器手动屏蔽广告_qq好友屏蔽你的特征现在很多软件的免费版都是有广告的,这让原本清清爽爽的界面变得乱七八糟,QQ虽然没有收费版,但是也要开了会员才能去广告。那不开会员如何屏蔽QQ广告呢?早在QQ2009Beta版的时候,可以通过删除一些文件让非会员也能实现去广告的目的,可惜从QQ2009正式版起增加了文件完整性检查,删除文件会导致QQ无法启动,并且要求重新安装。这里要介绍的方法,其实只要你对Windows操

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号