首页 > 其他分享 >vue解决跨域方法

vue解决跨域方法

时间:2023-06-02 21:06:51浏览次数:53  
标签:baidu vue http 跨域 nginx api 解决 com


什么是跨域

  跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。 这里列举一个经典的列子:

#协议跨域
http://a.baidu.com访问https://a.baidu.com;
#端口跨域
http://a.baidu.com:8080访问http://a.baidu.com:80;
#域名跨域
http://a.baidu.com访问http://b.baidu.com;

  现在很多公司都是采用前后分离的方式开发。那么出现经常和会跨域打交道。我这里整理日常开发中解决跨域的几种方案。我们前端使用的Vue,后端使用的NodeJs。

解决方案

proxyTable

  这里vue脚手架生成的标准项目为准。一般在项目config目录下面有个index文件。里面格式如下:

'use strict'
const path = require('path')
module.exports = {
    dev: {
        // Paths
        assetsSubDirectory: 'static',
        assetsPublicPath: '/',
        proxyTable: {
            '/api': {
                target: 'http://localhost:7001',//后端接口地址
                changeOrigin: true,//是否允许跨越
                pathRewrite: {
                    '^/api': '/api',//重写,
                }
            }
        },
        host: '192.168.0.104',
        port: 8081,
        autoOpenBrowser: false,
        errorOverlay: true,
        notifyOnErrors: true,
        poll: false,
        useEslint: true,
        showEslintErrorsInOverlay: false,
        devtool: 'eval-source-map',
        cacheBusting: true,
        cssSourceMap: false,
    },

}

  上面配置中,我们根据实际情况只需要修改proxyTable对于配置即可。假设我后端请求地址是http://localhost:7001,所有api的接口url都以/api开头。所以首先需要匹配所有以/api开头的.然后修改target的地址为http://localhost:7001。最后修改pathRewrite地址。将前缀 '^api' 转为 '/api'。如果本身的接口地址就有 '/api' 这种通用前缀,就可以把 pathRewrite 删掉。注意这个方式只能在开发环境中使用。

CORS

  CORS即跨源资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。但是CORS也具有一定的风险性,比如请求中只能说明来自于一个特定的域但不能验证是否可信,而且也容易被第三方入侵。 这里一般需要后端配合,开启cors。一般各种语言都有类似的包。比如NodeJS的koa2-cors

var koa = require('koa');
//npm install --save koa2-cors
var cors = require('koa2-cors');
var app = koa();
//开启
app.use(cors());

这个方式解决的跨越问题支持开发和生产环境。但是有一定的安全性问题。

Nginx

  当我们明白跨越的含义之后。只要解决了'源'的问题。那么跨越也就不存在了。这里我们便会想到proxy,同时也会想到Nginx。

我们只需要在部署静态资源配置下面加上红框里面的配置就可以了。同时这个方法支持开发环境和生产环境。

后端程序代理

  当然上面2个方法都需要后端的配合和需要修改服务器配置。所有还有一种方法不需要他们配合 ,我们自己就可以做到。就是我们自己启一个后端程序做代理。然后把所有的请求转发到服务器。这里要用到node的一个包http-proxy-middleware。关键代码(express)如下

  

用Vue-cli脚手架搭建了个demo,前后分离就有跨域问题的出现。

我自己在网上找了2个接口做测试:

安装模块axios进行ajax请求,直接请求,肯定显示跨域,无法请求。

 ===============    以下为npm run dev 跨域的解决方法    ===============

vue解决跨域方法_.net

脚手架Vue-cli已经帮我们留好了接口


在config目录下的index.js文件,有个参数:

proxyTable:{}

所以,我把参数添加成:

vue解决跨域方法_跨域_02



请求链接就变成这样了:

vue解决跨域方法_.net_03

vue解决跨域方法_nginx_04

最后,把数据打印出来,就可以了。。

vue解决跨域方法_.net_05

===============    以上为npm run dev 跨域的解决方法    ===============

 

 

===============    以下为npm run build 跨域的解决方法    ===============

我们要打包上线:就用npm run build会打包成dist文件

但发到线上,就得用nginx解决跨域。

首先,下载nginx

入门命令:

  在ngix文件目录下执行以下命令

  start nginx  开启ngix

  nginx -s quit  退出 

  nginx -s reload 重启

        nginx -t 检查配置文件是否成功 

然后:进入nginx/conf目录下的,找到nginx.conf文件

添加如下配置:

vue解决跨域方法_nginx_06

启动ngix服务器: start nginx

输入网址:http://localhost:8099

完美!!!!打包后也解决了。。

===============    以上为npm run build 跨域的解决方法    ===============

标签:baidu,vue,http,跨域,nginx,api,解决,com
From: https://blog.51cto.com/chengzheng183/6404848

相关文章

  • kali使用docker时遇到的错误及解决问题
    前言最近在学习在kali用docker搭建环境,但是一开始就遇到了问题本机无法访问kali开启的docker容器问题描述物理机访问kali开启的docker容器时访问不了。在虚拟机中可以通过telnetipport的方式可以确定docker容器的端口通过虚拟机可以访问,但是在物理机中无法通过telnet测试,并......
  • vue学习笔记一
    VUE自学目录VUE自学一、vue核心的相关学习一,搭建vue开发环境1.下载vue.js2.下载扩展工具二,helloworld案例三,helloworld项目扩展四,模板语法五,数据绑定六,el和data的两种写法发七,理解MVVM模型八,数据代理1.Object.defineProperty2.什么是数据代理3.vue中的数据代理九,事件处理1.事件......
  • vue、js onSelect事件 获取选中的值
    https://huaweicloud.csdn.net/639ff5afdacf622b8df90ecc.html?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~activity-1-125977595-blog-51669331.235^v36^pc_relevant_default_base3&depth_1-ut......
  • github上传时出现error: src refspec master does not match any解决办法
    问题产生原因分析引起该错误的原因是,目录中没有文件,空目录是不能提交上去的解决方法touchREADME1.gitaddREADME2.gitcommit-m'firstcommit'3.gitpushoriginmaster来自:http://www.open-open.com/lib/view/open1366080269265.html实际上gitinit这一步之后创建了一......
  • 总结vue3 的一些知识点:Vue.js 安装
    Vue.js安装1、独立版本我们可以在Vue.js的官网上直接下载vue.min.js并用 <script> 标签引入。下载Vue.js2、使用CDN方法以下推荐国外比较稳定的两个CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。StaticfileCDN(国内) : https://cdn.staticfile.org/v......
  • 总结vue3 的一些知识点:Vue.js 安装
    Vue.js安装1、独立版本我们可以在Vue.js的官网上直接下载vue.min.js并用 <script> 标签引入。下载Vue.js2、使用CDN方法以下推荐国外比较稳定的两个CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。StaticfileCDN(国内) : https://cdn.staticfile.org/v......
  • Vue——前端发展史、Vue介绍和使用、插值语法、文本指令、事件指令
    前端的发展史#1HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看 javascript=ECMAScript(5,6,13)+Dom+Bom#2Ajax的出现->后台发送异步请求,Ren......
  • 总结vue3 的一些知识点:​Vue.js 条件语句​
    Vue.js条件语句条件判断v-if条件判断使用v-if指令:v-if指令在元素和template中使用v-if指令:<divid="app"><pv-if="seen">现在你看到我了</p><templatev-if="ok"><h1>菜鸟教程</h1><p>学的不仅是技术,更......
  • 总结vue3 的一些知识点:​Vue.js 条件语句​
    Vue.js条件语句条件判断v-if条件判断使用v-if指令:v-if指令在元素和template中使用v-if指令:<divid="app"><pv-if="seen">现在你看到我了</p><templatev-if="ok"><h1>菜鸟教程</h1><p>学的不仅是技术,更......
  • centos7卡在sda assuming drive cache write through不能进入操作系统的一个解决方案
    1、https://blog.csdn.net/shishui07/article/details/113934961?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-113934961-blog-101298947.235^v36^pc_relevant_default_base3&spm=1001.2101.3001.4242.4&utm_rel......