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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DECODE函数使用

    DECODE函数使用DECODE函数,是ORACLE公司的SQL软件ORACLEPL/SQL所提供的特有函数计算方式,DECODE函数是ORACLEPL/SQL的功能强大的函数之一,了解使用DECODE函数很有必要。1DECODE中的if-then-else逻辑在逻辑编程中,经常用到If–Then–Else进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:  DECOD…

    2022年7月17日
    20
  • Pytest(13)命令行参数–tb的使用

    Pytest(13)命令行参数–tb的使用前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

    2022年7月30日
    7
  • wireshark抓包分析UDP

    wireshark抓包分析UDP1 什么是 UDP 传输层有两个协议 之前讨论过的 TCP 协议和现在要说的 UDP 协议 二者互为补充 UDP 是无连接的协议 它无需经过繁琐的握手就能建立连接并且发送已封装的 IP 数据包 它能做的事情很少 而面向连接的 TCP 协议几乎可以做所有事情 特点 UDP 最大的三个特点是无连接 不可靠 快速传输 UDP 提供了无连接通信 且不对传送数据包进行可靠性保证 适合于一次传输少量数据 UDP 传输的可靠性由应用层负责 常用的 UDP 端口号有 53 DNS 69 TFTP 161 SNMP UDP 报文没有可

    2025年6月20日
    3
  • CSS的四种基本选择器和四种高级选择器[通俗易懂]

    CSS的四种基本选择器和四种高级选择器[通俗易懂]CSS选择器:就是指定CSS要作用的标签,那个标签的名称就是选择器。意为:选择哪个容器。CSS的选择器分为两大类:基本选择题和扩展选择器。基本选择器:标签选择器:针对一类标签 ID选择器:针对某一个特定的标签使用 类选择器:针对你想要的所有标签使用 通用选择器(通配符):针对所有的标签都适用(不建议使用)下面来分别讲一讲。1、标签选择器:选择器的名字代表html页面上的标签…

    2022年7月27日
    15
  • Android程序员如何制定自己的职业规划,拒绝做码农[通俗易懂]

    Android程序员如何制定自己的职业规划,拒绝做码农[通俗易懂]无论是程序员还是任何其他的职业,我认为都应该有清晰长远的职业规划。虽然说计划没有变化快,但如果没有计划就更谈不上计划了。没有职业规划的人,在工作上基本都是为了完成任务而做,很难得到提升,因为没有目标,所以人就是一种得过且过的状态。所以作为一个有眼光的人,应该有自己长远的职业规划,即使没有长远的职业规划,也应该有短期的规划,这样人做事才有动力,有目标。程序员一直都是一个热门话题,因为工资比较高,…

    2022年4月28日
    169
  • 域名是http和https都可以访问;但是http访问,就没法存储session:https就可以存储session「建议收藏」

    域名是http和https都可以访问;但是http访问,就没法存储session:https就可以存储session

    2022年2月10日
    50

发表回复

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

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