vue解决跨域访问问题(个人学习笔记六)

这篇具有很好参考价值的文章主要介绍了vue解决跨域访问问题(个人学习笔记六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

友情提醒

先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。

第一章、跨越问题解决

1.1)什么是跨域问题?

vue单页应用项目开发时,避免不了要请求后端,这时通常就会出现跨域问题
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都会导致跨域问题。即前端接口去调用不在同一个域内的后端服务器而产生的问题。

1.2)第一种解决方式:后端设置允许跨域访问

注意:但在生产环境下,为了安全起见,还是建议不要设置允许跨域访问,或者 限制允许跨域的IP
例如:SpringMVC允许跨域的设置
1.使用的方式用@Controller和@CrossOrgin一起使用,可以实现跨域!
只有Spring版本从4.2开始才有跨域支持!

//某个方法支持跨域访问:在方法上增加@CrossOrigin注解
@RequestMapping("/crossDomain2.action")
@ResponseBody
@CrossOrigin
public String crossDomain2(HttpServletRequest req, HttpServletResponse res, String name){
    return null;
}

整个Controller都支持跨域访问

//整个Controller都支持跨域访问,在类上面加上注解@CrossOrigin
@Controller
@CrossOrigin
public class TestController {

}

2.使用定义全局的跨域配置:可以通过实现WebMvcConfigurer并重写 addCorsMappings方法来实现跨域
3.使用过滤器方式

public class HeaderFilter implements Filter{
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse) res;
        String originHeader = request.getHeader("Origin");
        response.setHeader("Access-Control-Allow-Origin", originHeader);
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "0");
        response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("XDomainRequestAllowed","1");
        response.setHeader("XDomainRequestAllowed","1");
        chain.doFilter(request, response);
    }
}

1.3)第二种解决方式:前端配置代理

代理服务器的主要思想是通过建立一个端口号和前端相同的代理服务器进行中转,从而解决跨域问题。因为代理服务器与前端处于同一个域中,不会产生跨域问题;而且代理服务器与服务器之间的通信是后端之间的通信,不会产生跨域问题。
原理:浏览器和服务器当:协议、ip、端口号有一个不一致,就是违背同源策略
找一个和浏览器同源的服务器,让这个服务器帮我们代理给别的服务器发请求服务器之间不必遵守同源策略

第二章、配置代理服务器

vue-cli配置代理的两种方法:都要编写vue.config.js
vue 允许跨域访问,前端知识汇总,vue.js,学习,笔记

2.1)配置简单代理服务器

①优点:配置简单,请求资源时直接发给前端(8080)即可
②缺点:不能配置多个代理,不能灵活的控制请求是否走代理
③工作方式:若按照上述配置代理,当请求了不存在的资源时,那么该请求就 会转发给服务器(有限匹配前端资源)

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,//对使用的JS 语法进行转译  不同版本使用不同
  // 开启代理服务器,注意:这里的端口号写后端的端口号(方式一)
  //简单代理服务器
  devServer:{
    port:8080,//当前前端服务器的端口号  不写默认是8080
    
    proxy:"http://127.0.0.1:8081"//代理服务器
  }
})

vue 允许跨域访问,前端知识汇总,vue.js,学习,笔记

2.2)多个代理配置

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,//对使用的JS 语法进行转译  不同版本使用不同
  // 开启代理服务器,注意:这里的端口号写后端的端口号(方式一)
  /*//简单代理服务器
  devServer:{
    port:8080,//当前前端服务器的端口号  不写默认是8080
    proxy:"http://127.0.0.1:8081"//代理服务器
  }*/
  /*配置多个代理*/
  devServer:{
    port:9527,//前端服务器端口号变成9527
    proxy:{
      //配置多个代理服务器格式:
      /*"/代理服务器的名字":{
        target:"代理服务器的地址",
        ws:true,//用于支持websocket
        changeOrigin: true,// 用于控制请求头中的host值  代理欺骗 可以不写
        pathRewrite: {'^/代理服务器名字': ''} //重写路径,把所有路径中包含/代理服务器名的路径替换为空字符串
      }*/
      "/myFirstProxy":{
     
        target:"http://127.0.0.1:8081", //代理服务器的地址
        ws:true,//用于支持websocket
        //就是把/myFirstProxy变成了空字符串
        pathRewrite:{"^/myFirstProxy":""}//重写路径,把所有路径中包含/代理服务器名的路径替换为空字符串
      },
      "/mySecondProxy":{
        target:"http://127.0.0.1:8082", //代理服务器的地址
        ws:true,//用于支持websocket
        pathRewrite:{"^/mySecondProxy":""}
      }
    }
  }
})

发起请求:文章来源地址https://www.toymoban.com/news/detail-619029.html

<template>
    <div>
        <h1>欢迎访问员工管理页面</h1>
        <button @click="sendRequestDemo()">访问后台服务器</button>
        <button @click="sendRequestDemo2()">访问后台服务器使用多代理方式</button>
    </div>
</template>

<script>
    import axios from "axios"
    export default {
        name: "EmpDemo",
        methods:{
            sendRequestDemo2(){
                //使用多代理服务器   根据代理服务器的名字 找具体的代理服务器发起代理请求
                axios({
                    method:"get",
                    //http://127.0.0.1:8081/vueweb001/demo1/methodDemo.action
                    url:"http://localhost:9527/myFirstProxy/vueweb001/demo1/methodDemo1.action"
                }).then(function(result){
                    alert(result.data)
                    console.log("myFirstProxy接收到的值:",result.data)
                });
            },
            sendRequestDemo(){
                //配置简单代理服务器 发起异步请求 访问后台服务器
                axios({
                    method:"get",
                    配置简单代理服务器 请求资源时直接发给前端(8080)即可
                    //我们把请求发给前端服务器再由代理服务器帮我们转发到 8081服务器
                    url:"http://localhost:8080/vueweb001/demo1/methodDemo1.action"
                }).then(function(result){
                    alert(result.data)
                    console.log(result.data)
                });
            }
        }
    }
</script>
<style scoped>
</style>

到了这里,关于vue解决跨域访问问题(个人学习笔记六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端笔记 ---- Chrome 浏览器不能跨域访问解决方案

    1. 需求场景 Chrome 浏览器开发 H5 进行接口联调时,浏览器不允许跨域访问; 想通过浏览器设置,不使用代理等,浏览器可以进行跨域访问。 2. 报错图片 3. 解决方案 3.1 获取Chrome 浏览器安装位置 3.2 设置允许跨域和不验证证书 3.3 cmd 执行设置命令 3.4 组成完整命令 3.5 cmd 运行命

    2024年02月15日
    浏览(53)
  • nginx 配置访问地址和解决跨域问题(反向代理)

    1、配置访问地址(通过ip访问) 2、解决跨域问题(反向代理) 问题:前端页面(端口30的ip)需要去访问一个43端口的后端接口,属于跨域问题;

    2024年04月09日
    浏览(51)
  • springcloud:解决阿里云OSS文件访问跨域问题

    最近在高德地图中引用阿里云OSS存储的图片时,出现跨域访问问题,特此记录,以方便后续同学参考 1、在阿里云OSS后台管理中,进入权限管理,进入跨域设置,添加跨域规则,设置来源为 * 图片来源于https://blog.csdn.net/strugglerookie/article/details/119417281 2、至此配置完成后访问图

    2024年02月01日
    浏览(41)
  • SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

    最近在写和同学一起做一个前后端分离的项目,今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后,抓包发现后端返回了一个 403 的错误,解决了很久发现是【跨域问题】,第一次遇到,便作此记录✍ 在后端服务器启动后,前端页面也起了起来,然后点击这个

    2024年02月03日
    浏览(40)
  • Vue-配置代理(解决跨域问题)

    现在解决跨域主要有两种方式是CORS和Jsonp,但是在开发中用的比较多的是配置一个代理服务器。   上面那个图,左边是客户端所处位置,中间是代理服务器,要注意,红色框是客户所处位置,右边蓝色框是5000服务器,中间的粉色框因为是服务器和蓝色框服务器 之间进行数据

    2024年02月05日
    浏览(48)
  • Vue中如何解决跨域问题

      跨域报错是前端开发中非常经典的一个错误,报错如下  Access to XMLHttpRequest at \\\'......\\\' from origin   \\\'......\\\' has been blocked by CORS policy:   No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource. 跨域错误源自于浏览器的同源策略 ,想要解决跨域首先要知道什么是同源策略?

    2023年04月08日
    浏览(31)
  • vue2跨域问题解决[前端方法]

    前端项目中常见的跨域报错如下: Access to XMLHttpRequest at \\\'https://xxx.com/ms/\\\' from origin \\\'http://10.23.30.135:8080\\\' has been blocked by CORS policy: No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource. 针对这种跨域的报错我们可以通过后端设置 Access-Control-Allow-Origin 的header来解决,但一般

    2024年02月08日
    浏览(53)
  • Vue2怎么解决跨域问题

    1.跨域报错: 项目目录:  第一步:在vue项目中的跟目录下创建一个 vue.config.js ,文件名是固定的,名字不一样会报错,如果有这个文件就不用新建 第二步: 在vue.config.js里边直接复制粘贴下面这串代码: 粘贴后,vue.config.js代码如下: 第三步:如果你使用的是axios来请求数据

    2024年02月12日
    浏览(86)
  • vue项目跨域问题(图片跨域)devServer.proxy代理失效时,nginx反向代理解决跨域问题

    ​ 本篇文章主要记录个人在公司项目开发中所遇问题,主要内容:在vue项目的开发中图片所存的服务器/端口号和项目所在的服务器/端口号不同,出现了跨域问题的保错。 ​ 如果文章有歧义,请各位大佬指出,避免误导更多的人!! Bug起因 ​ 在vue项目的开发中图片所存的

    2024年02月15日
    浏览(46)
  • 解决SpringBoot和前端Vue的跨域问题

    一、为什么会出现跨域问题           出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同

    2024年02月04日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包