vue前端怎么解决跨域问题_前端跨域调用js方法解决方案

vue前端怎么解决跨域问题_前端跨域调用js方法解决方案跨域问题是什么?怎样解决?vue前端配置代理服务器,SpringBoot提供跨域的解决方法

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

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.什么是跨域?

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
在这里插入图片描述

2.什么是同源策略

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说

Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略又分为以下两种:

  • DOM同源策略:禁止对不同源页面DOM 进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。
  • XMLHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。么去解决跨域?

2.解决跨域的三种方法

1. JSONP

JSONP 包含两部分: 回调函数和数据。

回调函数是当响应到来时要放在当前页面被调用的函数

数据就是传入回调函数中的json数据,也就是回调函数的参数了

原理: 是用script标签的src属性向后台发起接口请求,把返回来的值作为一个js处理

应用场景:只能适用于get请求接口方式,因为get请求方式把参数值拼接到url地址头上

优点: 前端不需要做过多处理,在后端解决跨域问题 ;它可以兼容低版本的浏览器

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP 实例</title>
</head>
<body>
<div id="divCustomers"></div>
<script type="text/javascript">
function callbackFunction(result, methodName)
{
    var html = '<ul>';
    for(var i = 0; i < result.length; i++)
    {
        html += '<li>' + result[i] + '</li>';
    }
    html += '</ul>';
    document.getElementById('divCustomers').innerHTML = html;
}
</script>
<script type="text/javascript" src="https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>
</body>
</html>

上述实现原理:

(1) 利用script标签,规避跨域

(2) 在客户端声明一个函数,function jsonCallBack(){}

(3) 在服务端根据客户端传来的信息,返回一个字符串

(4) 客户端,利用<script>标签解析为可运行的JavaScript代码,调用 jsonCallback() 函数。

2.代理服务器(以Vue为例)

webpack 给我们提供了这个功能 官网:https://webpack.docschina.org/concepts/

vue前端怎么解决跨域问题_前端跨域调用js方法解决方案

在前端服务和后端接口服务之间 架设一个中间代理服务,它的地址保持和前端服务一致,那么:

  1. 中间服务和前端服务之间由于协议域名端口三者统一不存在跨域问题,可以直接发送请求
  2. 中间服务和后端服务之间由于并不经过浏览器没有同源策略的限制,可以直接发送请求

这样,我们就可以通过中间这台服务器做接口转发,在开发环境下解决跨域问题,看起来好像挺复杂,其实vue-cli已经为我们内置了该技术,我们只需要按照要求

配置一下即可。

vue.config.js 文件中配置:

module.exports = { 
   
  productionSourceMap:false,
  // 关闭ESLINT校验工具
  lintOnSave: false,
  //配置代理跨域
  devServer: { 
   
    proxy: { 
   
      "/api": { 
   
        target: "http:localhost:8088",
        pathRewrite: { 
   '^/api':''} //如果后端的API都是以 api 开头,则不需要此行
      },
    },
  },
};

3.后端服务器设置跨域(以springBoot为例)

@Configuration
public class CorsConfig { 
   

    // 当前跨域请求最大有效时长。这里默认1天
    private static final long MAX_AGE = 24 * 60 * 60;

    @Bean
    public CorsFilter corsFilter() { 
   
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
        corsConfiguration.setMaxAge(MAX_AGE);
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
        return new CorsFilter(source);
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194114.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • smartctl用法心得

    smartctl用法心得SMART简介S.M.A.R.T.,全称为“Self-MonitoringAnalysisandReportingTechnology”,即“自我监测、分析及报告技术”。是一种自动的硬盘状态检测与预警系统和规范。通过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行情况进行监控、记录并与厂商所设定的预设安全值进行比较,若监控情况将或已超出预设安全值的安全范围,就可以通过主机的监控硬件或软件自动向用户作出警告并进行轻微的自动修复,以提前保障硬盘数据的安全。除一些出厂时间极早的硬盘外,现

    2022年10月8日
    3
  • 深度学习环境配置1——windows下的tensorflow-gpu=1.13.2环境配置

    深度学习环境配置1——windows下的tensorflow-gpu=1.13.2环境配置神经网络学习小记录42——windows下的tensorflow-gpu=1.13.2环境配置学习前言环境内容Anaconda安装下载Cudnn和CUDA配置tensorflow环境安装VSCODE学习前言好多人问环境怎么配置,还是出个教程吧。环境内容tensorflow-gpu:1.13.2keras:2.1.5numpy:1.17.4Anaconda安装取网上搜索Anacon…

    2022年5月2日
    42
  • 二进制与十进制的相互转换

    二进制与十进制的相互转换博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):二进制如何转十进制,十进制如何转二进制十进制转二进制转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制;1、正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。也就是说,将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,…

    2022年10月17日
    4
  • DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运[通俗易懂]

    DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运[通俗易懂]DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运导读:2020年的开篇,开的太意外,无论以什么样的眼光去回顾2020,它一定是载入史册的一年。突然起来的疫情,打得人们措手不及!人生的确不易,每个人都在负重前行,致敬那些可爱的人,感谢钟院士,感谢医护人员,感谢我们这这个强大的国家。2020年,太特殊,特殊的就像一场梦,无数的关键词涌入了记忆的心头:新冠,武汉,没毕业照,科比……前几天看到这样的一段话:2020年,最大的收获是一身伤,一身债,半条命、还活.

    2022年7月26日
    5
  • SQL 游标使用示例

    SQL 游标使用示例SQL游标(cursor)详细说明及内部循环使用示例定义    游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。    游标是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据。一般复杂的存储过程,都会有游标的出现,他的用处主

    2022年7月12日
    12
  • Vue父子组件传值的方法[通俗易懂]

    Vue父子组件传值的方法[通俗易懂]1.父向子传值props父组件:&lt;child:inputName="name"&gt;子组件:(1)props:{   inputName:String,   required:true  }(2)props:["inputName"]2.子组件向父组件传值$emit子组件: &lt;span&gt;{{childValue}}&lt;/s…

    2022年5月17日
    113

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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