服务器运维(六)跨域配置 Preflight 问题——东方仙化神期

正确配置

python

复制代码
| **Python(Django)** | 在 `settings.py` 中配置:
```python
INSTALLED_APPS = [
    # ...
    'corsheaders',
    # ...
]

MIDDLEWARE = [
    # ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ...
]

CORS_ALLOWED_ORIGINS = ['https://your-frontend.com']  # 生产环境指定前端域名
CORS_ALLOW_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
CORS_ALLOW_HEADERS = ['Origin', 'X-Requested-With', 'Content-Type', 'Accept', 'Authorization']
``` |
| **Java(Spring Boot)** | 编写配置类:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("https://your-frontend.com") // 生产环境指定前端域名
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization")
                .allowCredentials(true) // 若需携带凭证,开启此选项
                .maxAge(3600); // 预检请求结果缓存时间(秒)
    }
}
``` |


### 三、前端无需额外操作(浏览器自动处理)
前端发起跨域请求时,浏览器会**自动触发 Preflight 预检**,无需开发者手动发送 OPTIONS 请求。只需确保请求的方法、自定义头与服务端配置的 `Access-Control-Allow-Methods`、`Access-Control-Allow-Headers` 匹配即可。


通过以上配置,服务端就能正确响应 Preflight 预检请求,浏览器会在预检通过后执行实际的业务请求,从而解决跨域问题。

nodejs

复制代码
app.use((req, res, next) => {res.header('Access-Control-Allow-Origin', '*');res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');if (req.method === 'OPTIONS') {res.sendStatus(204);} else {next();}});
服务端语言 / 框架 配置方式示例
Node.js(Express) ```javascript
const express = require('express');
const app = express();

Preflight意义

CORS 预检请求(Preflight)失败 ,具体错误类型是 HeaderDisallowedByPreflightResponse。

其本质原因是:前端发起跨域请求时,浏览器发送的预检(OPTIONS)请求中包含了自定义 HTTP 头,但 PHP 后端的响应头中未配置允许这些自定义头。

阿雪技术观

让我们积极投身于技术共享的浪潮中,不仅仅是作为受益者,更要成为贡献者。无论是分享自己的代码、撰写技术博客,还是参与开源项目的维护和改进,每一个小小的举动都可能成为推动技术进步的巨大力量

Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progrss

相关推荐
Michelle80231 小时前
第1周——认清考试与IDLE生存指南
运维·服务器
严同学正在努力1 小时前
PostgreSQL 高可用教程(流复制 + Patroni 生产级实战)
运维·数据库·ai·postgresql·架构
Soneswy1 小时前
Linux系统篇--用户切换与文件权限
linux·服务器
Ruiery1 小时前
Linux 6.6内核内存管理深度解析(三·补):页表项(PTE)结构与地址翻译
linux·运维·服务器
阿狸猿1 小时前
AI Agent自动写自动化脚本
运维·人工智能·自动化
五块钱的方便面2 小时前
ubuntu下networkmanager不让管理解决办法
linux·运维·ubuntu
云飞云共享云桌面2 小时前
苏州半导体工厂研发部门多个SolidWorks 如何共享服务器来进行研发设计
运维·服务器·3d·自动化·制造
呉師傅2 小时前
Win7剪切文件变成复制文件如何修改【资源管理器异常类故障】
运维·网络·windows·电脑
honsor2 小时前
机房动环实战:H-THDRJ45 双网口温湿度变送器 Modbus RTU RS485 冗余组网方案
运维·服务器·网络
快乐的韭菜根根2 小时前
Slurm 指定 GPU 卡:`File=/dev/nvidiaX` 映射的坑与修复
java·服务器·网络