当前位置: 首页 > news >正文

跨域问题解决

目录

一、同源策略

同源策略(Same-Origin Policy, SOP)

二、跨域问题

三、解决方法

(1)CORS(跨域资源共享)

(2)前端配置反向代理


一、同源策略

在了解跨域问题前,我们首先来了解一下什么是同源策略。

同源策略(Same-Origin Policy, SOP)

        同源策略是一种浏览器的安全机制,目的是防止恶意网站通过 JavaScript 访问用户的敏感数据。

同源 指的是协议、域名、端口号必须完全相同。例如:

  • http://example.com:80/page1.htmlhttp://example.com:80/page2.html 同源

  • https://example.com/page.html(协议不同)和 http://example.com/page.html 不同源

  • http://example.com:8080/page.html(端口不同)和 http://example.com:80/page.html 不同源

  • http://sub.example.com/page.html(子域不同)和 http://example.com/page.html 不同源

       如果两个页面不同源,默认情况下,它们之间的 JavaScript 代码不能相互访问 DOM 或 Ajax 请求数据。

二、跨域问题

       当一个网页尝试向不同源的服务器请求数据时,浏览器会阻止请求限制返回数据的访问,这就是跨域问题

       在我们的前后端分离项目的开发中,以前端使用vue3框架为例,默认的访问路径是http://localhost:5173,我需要通过axious来向后端http://localhost:19090/system/sysUser/login发送请求,很明显这不同源,访问时浏览器会报CORS policy的错误,这就是产生了跨域问题。

三、解决方法

我这边介绍两种最常用的方法:

(1)CORS(跨域资源共享)

服务器可以在响应头中添加如下:

Access-Control-Allow-Origin: *

或指定允许的源:

Access-Control-Allow-Origin: https://example.com

(2)前端配置反向代理

      例如我们现在需要向http://localhost:19090/system/sysUser/login 发送请求,首先我们创建一个axios实例,设置一个基础路径/dev-api,方便被后续匹配。

const service = axios.create({
  baseURL:"/dev-api",
  timeout:5000,
})

      然后我们在函数中编写请求接口路径。

export function loginService(userAccount, password) {
  return service({
    url:"/sysUser/login",
    method: "post",
    data: {userAccount, password}
  })
}

        最后我们在vite.config.js文件中配置代理服务器策略:

server: {
    proxy: {
      "/dev-api": {
        target: "http://127.0.0.1:19090/system",
        rewrite: (p) => p.replace(/^\/dev-api/, ""),
      },
    },
  },

       这段代码的意思是,匹配路径中含/dev-api的请求,将其转发到http://127.0.0.1:19090/system,然后重写路径,正则表达式匹配/dev-api/,用空字符串将其替代,避免对路径产生影响。

  • 原始请求路径:http://localhost:5173/dev-api/sysUser/login
  • 转发后的路径:http://127.0.0.1:19090/system/sysUser/login

        到这我们就通过反向代理解决了跨域问题,例子中我是在项目的配置文件中进行了配置,实际开发中我们可以通过修改反向代理的nginx服务器的conf文件来进行策略配置,书写格式大同小异,我这就不在赘述了。

感谢阅读,希望对你能有所帮助!!!

相关文章:

  • 【Linux】进程的详讲(中上)
  • 蓝桥杯数学知识
  • 20250331-智谱-沉思
  • 蓝桥杯备赛之枚举
  • 在Windows Server上安装和配置MinIO对象存储服务
  • PyTorch量化进阶教程:第三章 A 股数据处理与特征工程
  • 以太坊DApp开发脚手架:Scaffold-ETH 2 详细介绍与搭建教程
  • Spring Boot 2.x 与 Nacos 整合规范指南
  • 函数:static和extern
  • 3 通过图形化方式创建helloworld
  • QML输入控件: TextField(文本框)的样式定制
  • 408 计算机网络 知识点记忆(3)
  • mysql JSON_ARRAYAGG联合JSON_OBJECT使用查询整合(数组对象)字段
  • “钉耙编程”2025春季联赛(2)题解(更新中)
  • 在 Cloud Run 上使用 Gemini API 构建聊天应用
  • linux 服务器创建服务器启动后服务自启动
  • 突破反爬困境:SDK开发,浏览器模块(七)
  • 汇编学习之《标志寄存器》
  • 音视频基础(图像的基础概念)
  • 5.2.1 WPF 通过ItemControl自己做柱状图
  • 西城网站建设/上海seo网站优化软件
  • wordpress摘要两端对齐/上海全国关键词排名优化
  • 建筑网站 法人签字/百度风云榜明星
  • 营销型网站开发制作/营销推广公司
  • 正能量软件不良网站下载/推广信息哪个平台好
  • 自助商城/灰色行业关键词优化