站点图标 神之眼的博客

关于.NET 10 中跨域请求设置的 setPreflightMaxAge(TimeSpan.FromMinutes(30))方法

當前文章的短網址連結為: https://unos.top/3i84

  corsPolicyBuilder.AllowAnyOrigin()
            .AllowAnyHeader()
            .AllowAnyMethod()
            .setPreflightMaxAge(TimeSpan.FromMinutes(30)) Code language: CSS (css)


setPreflightMaxAge用于设置 CORS 预检请求(Preflight Request)的缓存时间。

  1. 什么是预检请求?
    当浏览器发起一个”复杂请求”(如使用 PUT、DELETE 方法,或自定义头部)时,会先自动发送一个 OPTIONS 方法的请求到服务器,询问:
    服务器是否允许这个来源?
    服务器是否允许使用这个 HTTP 方法?
    服务器是否允许发送这些头部?
    这个 OPTIONS 请求就是预检请求。

2. SetPreflightMaxAge 的作用

SetPreflightMaxAge(TimeSpan.FromMinutes(30))

# 告诉浏览器:将这次预检请求的结果缓存 30 分钟
# 在 30 分钟内,如果再次发起相同的请求,浏览器不需要重新发送 OPTIONS 预检请求
# 直接复用缓存的 CORS 策略结果Code language: PHP (php)

3. 性能优化效果

没有设置时:

请求 1: OPTIONS (预检) → POST (实际请求)
请求 2: OPTIONS (预检) → POST (实际请求)  ❌ 重复预检
请求 3: OPTIONS (预检) → POST (实际请求)  ❌ 重复预检

设置 30 分钟缓存后:

请求 1: OPTIONS (预检) → POST (实际请求) ✅ 预检并缓存
请求 2: POST (实际请求)                  ✅ 使用缓存,跳过预检
请求 3: POST (实际请求)                  ✅ 使用缓存,跳过预检
(30 分钟内)

🎯 实际价值

1. 减少网络请求:30 分钟内只需发送一次 OPTIONS 请求
2. 降低服务器负载:减少预检请求的处理次数
3. 提升响应速度:后续请求无需等待预检完成
4. 改善用户体验:页面加载更快,尤其是频繁调用 API 的场景

⚙️ 建议值

开发环境:可以设置较短时间(如 5-10 分钟),方便调试 CORS 配置
生产环境:可以设置较长时间(如 30-60 分钟),最大化性能优化
超长时间(如 24 小时):不推荐,CORS 策略变更时客户端可能需要很久才能生效

退出移动版