前端/后端-配置跨域

1. 什么是跨域

协议(http /https)、域名(localhost / www.xxx.com)、端口(5173 / 3000 / 80)只要有一个不一样,就是跨域!

2. 浏览器为什么要禁止跨域?

假设你登录了 淘宝,cookie 存在浏览器。此时你打开一个 恶意网站

恶意网站想:我直接发请求到 taobao.com/pay 转账!

如果没有跨域限制

  • 浏览器会自动带上淘宝的 cookie
  • 恶意网站就能偷偷转走你的钱

浏览器为了阻止这种事,规定:

只有淘宝自己的页面,才能请求淘宝接口!

别的网站一律禁止!

这就是:同源策略

3. 为什么你本地开发会跨域?

  • 前端跑在 5173
  • 后端跑在 3000

在浏览器眼里:这是两个不同的 "网站"!

4. 前端设置跨域

vite.config.js

javascript 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()], // 必须有
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000', // 转发到后端
        changeOrigin: true
      }
    }
  }
})

api.js

javascript 复制代码
import axios from 'axios'

// 创建 axios 实例
const service = axios.create({
  baseURL: '/api', //是为了触发代理!
  timeout: 10000
})

注:

只要前端 baseURL 带 /api,后端接口就必须带 /api!

前后路径必须完全一样,才能匹配上!

5. 后端设置跨域

1.下载依赖cors

javascript 复制代码
npm install cors
  1. 如:在server.js里面加入一下两行代码
javascript 复制代码
const express = require('express');
const app = express();

// 👇 就这两行,解决所有跨域!
const cors = require('cors');
app.use(cors());

3.运行代码

javascript 复制代码
node server.js

注:

后端配置跨域后,前端就不需要跨域了,把vite.config.js还原,api的baseUrl用后端服务地址就行。

javascript 复制代码
import axios from 'axios'

// 创建 axios 实例
const service = axios.create({
  baseURL: 'http://localhost:3000', //后端服务地址
  timeout: 10000
})

6. 前端跨域和后端跨域的区别

一、前端跨域 = 前端代理

就是:Vite / Webpack 帮你转发请求。

原理:

  1. 前端访问自己:/api/xxx

  2. Vite偷偷转发到后端

  3. 浏览器以为是同域,不拦截

特点:

  • 只在本地开发有用

  • 上线后失效

  • 必须加前缀 /api 来触发转发

  • 后端接口必须对应 /api

  • 不适合图片、文件上传(容易坏)

  • 本质:绕开浏览器限制,不是真正解决

二、后端跨域 = CORS

就是:后端告诉浏览器:允许前端访问我

原理:

后端在响应头里加一句:"我允许这个前端调用我"浏览器看到就放行。

特点:

  • 开发、生产环境都能用

  • 真正、标准、官方的跨域方案

  • 前端不用加 /api

  • 后端不用加 /api

  • 完美支持图片、文件上传

  • 本质:真正解决跨域

相关推荐
新中地GIS开发老师1 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户059540174461 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈1 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen2 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒2 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端
梅孔立3 小时前
两种免费的翻译API调用方式详解 - Edge官方API与个人缓存服务
前端·缓存·edge
Revolution613 小时前
React 组件重新渲染时,到底重新执行了什么
前端·react.js·面试
用户2181697049304 小时前
Flutter(四)Dart语法 空安全 运算符 流程控制
前端
许彰午4 小时前
政务督办的分合模式:主办协办的并发审批
前端·javascript·政务
用户69371750013844 小时前
AI时代,程序员该往哪走?
前端·后端