自学内容网 自学内容网

解决CORS (跨源资源共享) 错误

问题引入

前端代码


<template>
  <div id="hello-vue" class="demo">
    {{ message }}
  </div>
  <el-button type="primary" @click="handleClick">我是一个按钮</el-button>

</template>


<script setup>

//加了{}说明是解构导入,即导入整个对象
//本来应该是 import Vue from "vue";
import { ref } from "vue";
import axios from 'axios';

// ****************定义响应式数据****************//
const message = ref("Hello Vue!!");
// ****************定义响应式数据****************//



// ****************定义方法****************//
const  handleClick = async() => {
  message.value = "你点击了按钮!";
  const response =await axios.get('http://localhost:8080/pra');
  console.log(response.data);
};
// ****************定义方法****************//
</script>


<style lang="scss" scoped>
</style>

1.使用 @CrossOrigin 注解(后端)

如果你只需要对某个特定的控制器或方法启用 CORS,你可以在控制器或者方法上使用 @CrossOrigin 注解。

 @CrossOrigin(origins = "http://localhost:5173")  // 允许来自 http://localhost:5173 的请求
@RestController
public class PraController {
    @CrossOrigin(origins = "http://localhost:5173")  // 允许来自 http://localhost:5173 的请求
    @GetMapping("/pra")
    public Result getPra() {
        return Result.success("成功pra");
    }
}

"http://localhost:5173"改成你自己的前端端口

 

2.使用代理解决 CORS 问题(前端)

  server: {
    proxy: {
      '/pra': {
        target: 'http://localhost:8080',  // 后端服务器地址
        changeOrigin: true,  // 是否允许代理改变源
        rewrite: (path) => path.replace(/^\/pra/, '/pra'),  // 重写路径
      },
    },
  },

1. server.proxy

这是 Vite 配置中的一部分,用于设置开发服务器的代理规则。代理是通过 proxy 配置项来定义的,目的是将前端的某些请求转发到后端服务器(通常运行在不同的端口上)。

2. '/pra'

这是配置的代理规则的路径匹配。表示当前端发起一个以 /pra 开头的请求时,Vite 会将这个请求转发给配置中的 target 地址。比如,如果你访问 http://localhost:5173/pra(Vite 开发环境),它会被代理到 http://localhost:8080/pra(后端服务器)。

3. target: 'http://localhost:8080'

target 是代理的目标地址,也就是后端 API 服务器的 URL。在这里,所有匹配 /pra 路径的请求都会被转发到 http://localhost:8080,也就是你的后端服务器。

4. changeOrigin: true

changeOrigin 设置为 true 时,代理会修改请求的 Origin 头部,使其看起来是从目标地址(http://localhost:8080)发出的请求。通常,这对于解决跨域问题很有用,因为浏览器会检查请求的 Origin 头来判断是否允许请求跨域。

例如,当前端请求 http://localhost:5173/pra 时,浏览器会发送一个带有 Origin: http://localhost:5173 的请求头,而后端服务器只会接受来自 http://localhost:8080 的请求。changeOrigin: true 会让请求的 Origin 头变为目标地址的域名,即 http://localhost:8080,避免出现跨域问题。

5. rewrite: (path) => path.replace(/^\/pra/, '/pra')

  • rewrite 是一个函数,它用于修改请求的路径。path 是匹配到的请求路径。

    举个例子,假设你配置的是:

    rewrite: (path) => path.replace(/^\/api/, '/v1/api')

    这样的话,/api/hello 会被重写为 /v1/api/hello,再转发给后端。path.replace(/^\/pra/, '/pra') 这段代码的意思是,当路径以 /pra 开头时,替换成 /pra,本质上它并不会改变路径,因为匹配的路径已经是 /pra,所以这段配置看起来是一个 "no-op"(即无操作)。这个配置在当前例子中没有实际效果,但通常可以用于对路径进行其他修改(比如删除前缀或添加其他部分)。

这个配置的作用是,当前端请求以 /pra 开头的路径时,Vite 会将请求转发到后端服务器 http://localhost:8080,并且会改变请求的 Origin 头部以避免跨域问题。rewrite 部分在当前配置中没有实际效果,但它通常用于修改请求路径,例如去掉前缀或添加其他路径部gaicgai'c


原文地址:https://blog.csdn.net/2301_78955442/article/details/143561526

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!