【亲测好用】跨域备忘单的最佳解决方案

2026-09-28 来源: 点击量

这是一份针对前端/全栈开发者的跨域(CORS)备忘单,覆盖原理、排查、解决方案与代码模板,建议收藏备用。

【亲测好用】跨域备忘单的最佳解决方案

一、 核心原理速查

同源策略三要素:协议、域名、端口必须完全一致,任一不同即跨域。

关键认知:跨域是浏览器的安全限制,请求本身能到达后端,但浏览器会拦截响应数据。服务器间通信不存在跨域。

二、 简单请求 vs 预检请求

表格

下载为表格

导出为图片

类型条件请求流程

简单请求GET/HEAD/POST + Content-Type 为 text/plain / multipart/form-data / application/x-www-form-urlencoded直接发送请求

预检请求PUT/DELETE、自定义请求头、JSON 格式 Content-Type 等先发 OPTIONS 预检 → 后端响应允许 → 再发真实请求

三、 CORS 核心响应头速查

文本

编辑

1Access-Control-Allow-Origin: https://example.com # 允许的源(生产环境禁用 *)

2Access-Control-Allow-Methods: GET, POST, PUT, DELETE # 允许的 HTTP 方法

3Access-Control-Allow-Headers: Content-Type, Token # 允许的自定义请求头

4Access-Control-Allow-Credentials: true # 允许携带 Cookie(此时 Origin 不能为 *)

5Access-Control-Max-Age: 3600 # 预检请求缓存时间(秒)

6Access-Control-Expose-Headers: X-Custom-Header # 允许前端读取的响应头

四、 解决方案选型指南

表格

下载为表格

导出为图片

场景推荐方案备注

本地开发Vite/Webpack devServer 代理前端自己搞定,无需后端配合

生产环境Nginx 反向代理 或 CORS二选一,Nginx 更彻底

前后端分离标准方案CORS后端配置,W3C 标准

iframe / 多窗口通信postMessage需校验 e.origin 防恶意消息

实时通信WebSocket天生不受同源策略限制

老系统兼容JSONP仅 GET,有 XSS 风险,已淘汰

五、 常用配置模板

Vite 代理(开发环境)

js

编辑

1// vite.config.js

2export default defineConfig({

3 server: {

4 proxy: {

5 '/api': {

6 target: 'http://localhost:3000',

7 changeOrigin: true,

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

9 }

10 }

11 }

12})

Nginx 反向代理(生产环境)

nginx

编辑

1server {

2 listen 80;

3 server_name www.frontend.com;

4 location /api {

5 proxy_pass http://www.backend.com;

6 proxy_set_header Host $host;

7 proxy_set_header X-Real-IP $remote_addr;

8 }

9}

Spring Boot 全局 CORS 配置

java

编辑

1@Configuration

2public class CorsConfig implements WebMvcConfigurer {

3 @Override

4 public void addCorsMappings(CorsRegistry registry) {

5 registry.addMapping("/**")

6 .allowedOrigins("http://localhost:8080")

7 .allowedMethods("GET", "POST", "PUT", "DELETE")

8 .allowedHeaders("*")

9 .allowCredentials(true)

10 .maxAge(3600);

11 }

12}

Node.js (Express) CORS 中间件

js

编辑

1const cors = require('cors');

2app.use(cors({

3 origin: 'http://localhost:8080',

4 credentials: true

5}));

六、 高频踩坑点

Allow-Credentials: true 时,Allow-Origin 不能用 *,必须指定具体域名

复杂请求的 OPTIONS 预检必须返回 204 状态码,否则真实请求不会发出

微服务架构下应在网关层统一配置 CORS,避免各服务重复配置导致响应头冲突

前端 fetch/XHR 携带 Cookie 需设置 credentials: 'include' / withCredentials: true

document.domain 方案在 Chrome 115+ 已废弃,不再推荐使用

相关文章
  • 【亲测好用】跨域备忘单的最佳解决方案
    【亲测好用】跨域备忘单的最佳解决方案

    这是一份针对前端/全栈开发者的跨域(CORS)备忘单,覆盖原理、排查、解决方案与代码模板,建议收藏备用。一、 核心原理速查同源策略三要素:协议、域名、端口必须完全一致,任一不同即跨域。关键认知:跨域是浏览器的安全限制,请求本身能到达后端,但浏览...

  • JS搭建教程避坑指南:踩过的坑都给你标好了
    JS搭建教程避坑指南:踩过的坑都给你标好了

    “零基础原生搭建”到“现代工程化搭建”,再到“后端 Node.js 搭建”的完整教程。你可以根据自己的学习目标选择对应的路线:一、 原生基础搭建(适合初学者练手)如果你是刚开始学习,建议先从最基础的 HTML、CSS 和 JS 组合开始,这能帮你建立清晰的认知框架。创...

  • 入门Ionic在实际项目中的应用技巧
    入门Ionic在实际项目中的应用技巧

    结合你之前关注的 Typecho 响应式方案,可以看出你对前端工程化和跨端适配有不错的敏感度。Ionic 的核心正是利用 Web 技术栈(HTML/CSS/JS)构建跨平台应用,这种“一次编写,多端部署”的思路,对你来说应该很容易上手。第一步:环境搭建与项目初始化Ionic 的开发高度...

  • 【推荐收藏】前端测试框架推荐全套资源大合集
    【推荐收藏】前端测试框架推荐全套资源大合集

    前端测试框架的选型,核心在于匹配你的项目技术栈、测试层级(单元、集成、E2E)以及团队现有的开发习惯。结合目前的主流趋势,为你梳理了以下核心推荐:单元测试:Jest vs VitestJest:前端单元测试的“老牌标杆”。开箱即用,快照测试和 Mock 能力极强,生态最完...

  • 2026年Angular还值得学吗最新趋势与最佳实践
    2026年Angular还值得学吗最新趋势与最佳实践

    关于“Angular 还值得学吗”这个问题,答案并不是绝对的“是”或“否”,而是取决于你的职业规划和目标项目类型。简单来说:如果你想进大厂、做大型企业级项目,Angular 依然是一个极具竞争力的“硬通货”;但如果你是想快速接单、做个人项目或初创公司,它可...

  • 【深度】Generator,每个前端都应该掌握的技能
    【深度】Generator,每个前端都应该掌握的技能

    在 Joomla 的开发与日常运营中,“Generator”(生成器)通常指代两类工具:一类是帮助开发者快速搭建组件、模块等扩展骨架的代码生成工具,另一类是面向网站管理员的内容或功能生成扩展。结合你之前的优化需求,以下为你梳理了 Joomla 生态中几款主流的 Generator 工...