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

目录

  • 友情提醒
  • 第一章、跨越问题解决
    • 1.1)什么是跨域问题?
    • 1.2)第一种解决方式:后端设置允许跨域访问
    • 1.3)第二种解决方式:前端配置代理
  • 第二章、配置代理服务器
    • 2.1)配置简单代理服务器
    • 2.2)多个代理配置

友情提醒

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

第一章、跨越问题解决

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
在这里插入图片描述

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"//代理服务器
  }
})

在这里插入图片描述

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":""}
      }
    }
  }
})

发起请求:

<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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/48986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Langchain 集成 Milvus

Langchain 集成 Milvus 1. 安装 Docker2. 部署 Milvus3.4. Langchain 集成 Milvus 1. 安装 Docker refer: https://docs.docker.com/engine/install/centos/ Milvus 会以容器方式启动&#xff0c;所以先安装 Docker。(本示例使用的是 Alma Linux 9.2) 卸载旧版本&#xff0c…

WEB APIs day4 (2)

三、M端事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

目录 前言 Stream geospatial HyperLogLog Bitmaps Bitfields 前言 redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛&#xff0c;同时 redis 也推出了额外的 5 个数据类型&#xff0c;他们分别是针对特殊场景才进行的应用的. Ps&#xff1a;这几种…

干货 | 电路设计中如何减少ESD?

干货 | 电路设计中如何减少ESD&#xff1f; 今天给大家分享的是&#xff1a;在电路设计和PCB设计如何防止ESD损坏设备。 在电子行业中&#xff0c;保护设备免受ESD损坏是必须要注意的。静电放电&#xff08;ESD&#xff09;是一种非常高的电压尖峰&#xff0c;很容易损坏集成电…

lc162.寻找峰值

由于题目假设nums[-1]和nums[n]等于负无穷 如果nums[i]>nums[i1]&#xff0c;即nums[-1]<nums[i]>nums[i1]&#xff0c;那么在[0,i]区间内一定存在峰值 如果nums[i]<nums[i1]&#xff0c;即nums[i]<nums[i1]>nums[n]&#xff0c;那么在[i1,n-1]区间内一定存…

【UE4】给角色添加脚步声

步骤&#xff1a; 1. 导入一个脚步声音频文件&#xff08;.wav格式&#xff09; 2. 打开角色蓝图&#xff0c;这里以第三人称角色模板蓝图“ThirdPersonCharacter”为例&#xff0c;在事件图表中添加一个生成音效的自定义事件。 3. 打开动画序列“ThirdPersonRun” 找到小白人…

【机器学习】异常检测

异常检测 假设你是一名飞机涡扇引擎工程师&#xff0c;你在每个引擎出厂之前都需要检测两个指标——启动震动幅度和温度&#xff0c;查看其是否正常。在此之前你已经积累了相当多合格的发动机的出厂检测数据&#xff0c;如下图所示 我们把上述的正常启动的数据集总结为 D a t…

基于飞桨paddle的极简方案构建手写数字识别模型测试代码

基于飞桨paddle的极简方案构建手写数字识别模型测试代码 原始测试图片为255X252的图片 因为是极简方案采用的是线性回归模型&#xff0c;所以预测结果数字不一致 本次预测的数字是 [[3]] 测试结果&#xff1a; PS E:\project\python> & D:/Python39/python.exe e:/pro…

性能提升,SpringBoot 3.2虚拟线程来了

spring boot 3.2 会提供默认支持&#xff0c;必须Java19。 在以往的项目中&#xff0c;我们面临了这样一种情况&#xff1a;我们收到了数千个认证请求。为了确保安全性&#xff0c;我们依靠第三方系统发送短信 OTP 进行验证。然而&#xff0c;有时候第三方系统花费的时间比预期…

Tesseract开源的OCR工具及python pytesseract安装使用

一 、介绍 Tesseract是一款由Google赞助的开源OCR。 pytesseract是python包装器&#xff0c;它为可执行文件提供了pythonic API。 Tesseract 已经有 30 年历史&#xff0c;开始它是惠普实验室的一款专利软件&#xff0c;在2005年后由Google接手并进一步开发和完善。Tesseract支…

高压放大器模块的作用是什么呢

高压放大器模块是一种集成了高压放大器芯片、控制电路、保护电路等多种元件和功能的模块化设备。它可以将输入信号进行放大处理&#xff0c;并输出到负载上&#xff0c;具有高性能、高可靠性、高稳定性等优点。下面安泰电子将详细介绍高压放大器模块的作用&#xff1a; 信号放大…

如何学好Java并调整学习过程中的心态:学习之路的秘诀

文章目录 第一步&#xff1a;建立坚实的基础实例分析&#xff1a;选择合适的学习路径 第二步&#xff1a;选择合适的学习资源实例分析&#xff1a;参与编程社区 第三步&#xff1a;动手实践实例分析&#xff1a;开发个人项目 调整学习过程中的心态1. 不怕失败2. 持续学习3. 寻求…

外观模式-提供统一入口

在办理流量套餐的时候&#xff0c;我们可以去官网查查询套餐&#xff0c;找出符合我们需求的套餐&#xff0c;然后进行办理。官网是充斥着各种各样的套餐&#xff0c;如果我们一个个去查看这些套餐&#xff0c;耗费的时间很多。而且在办理套餐的时候&#xff0c;步骤也比较多。…

Linux工具【1】(编辑器vim、编译器gcc与g++)

vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用&#xff08;g类似&#xff09;预编译编译汇编链接静态库与动态库 总结 引言 vim&#xff08;vi improved&#xff09;编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳…

03-树1 树的同构(c++)

03-树1 树的同构 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构的。 现…

MySQL优化(面试)

文章目录 通信优化查询缓存语法解析及查询优化器查询优化器的策略 性能优化建议数据类型优化索引优化 优化关联查询优化limit分页对于varchar end mysql查询过程: 客户端向MySQL服务器发送一条查询请求服务器首先检查查询缓存&#xff0c;如果命中缓存&#xff0c;则立刻返回存…

基于Javaweb实现ATM机系统开发实战(十五)退卡和转账跳转实现

首先创建一个servlet接受和处理请求&#xff1a; package com.atm.servlet;import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException;//用户退出 WebServlet("/logout") public class ExitServlet ex…

CSDN浏览如何解决

一、对于平时我们苦恼csdn数据不够好看 当面试等各个场合需要我们装*或者秀技术无法拿出亮眼的时候&#xff0c;刚好我闲时间编译的在线模块适合你 二、如何操作&#xff08;虚拟平台我已给大家放到最后直接使用即可&#xff09; 重点&#xff1a;pc端必须拥有python环境 win…

JGIT获取远程仓库、本地仓库提交版本号

https://www.freesion.com/article/50181381474/ JGIT获取远程仓库、本地仓库提交版本号 一、环境搭建二、项目结构二、代码部分 GitUtils.javaGitInfoAtom.java三、运行结果&#xff1a;总结 一、环境搭建 Maven依赖导入 <dependency><groupId>org.eclipse.jg…

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…