You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

每次CORS请求前必须发送预检请求吗?JioCinemas预检疑问

关于JioCinemas IPL赛事请求重复预检的问题解答

为什么每次都发送预检请求?

预检请求(OPTIONS)的缓存完全由服务端返回的Access-Control-Max-Age响应头控制。如果JioCinemas的CDN未配置这个头,或是将缓存时长设为0,浏览器就会在每次跨源请求前触发预检。

除此之外还有两种常见诱因:

  • 请求属于非简单请求:比如携带了自定义HTTP头(如鉴权、防盗链相关字段),或是请求的MIME类型不属于简单范畴(视频流请求基本符合这个特征),这类场景下浏览器必须发起预检,无缓存时就会重复发送。
  • 请求特征维度变化:浏览器的预检缓存是基于「请求源、目标域名、HTTP方法、自定义头集合」的组合维度。如果每次请求的自定义头存在差异(比如带了不同的临时token),或是URL参数导致请求特征改变,浏览器会判定为新请求,重新发起预检。

能不能将预检请求缓存30秒或1分钟?

完全可以,但需要JioCinemas的服务端/CDN调整配置:

  • 在OPTIONS预检请求的响应中添加Access-Control-Max-Age: 30(单位为秒),浏览器就会将预检结果缓存30秒,这段时间内同特征的跨源请求不会再触发预检。
  • 注意:不同浏览器对该值有上限限制,比如Chrome默认上限为600秒(10分钟),超过的数值会被浏览器自动截断为上限值。

你可能忽略的细节

  1. 简单请求的例外规则:如果是简单请求(仅限GET/POST/HEAD方法,请求头仅包含Accept、Accept-Language等简单字段,Content-Type为application/x-www-form-urlencoded、multipart/form-data或text/plain),浏览器不会发起预检。但视频流请求几乎都会携带自定义头,必然属于非简单请求,必须走预检流程。
  2. CDN的特殊缓存策略:部分CDN默认不缓存OPTIONS请求,或是会过滤掉Access-Control-Max-Age响应头,这也会导致每次跨源请求都触发预检。
  3. 预检缓存的会话限制:预检缓存仅在当前浏览器页面会话内有效,关闭页面后缓存会直接失效。

(参考你提供的网络面板截图)

内容的提问来源于stack exchange,提问作者koteshwarrao maripudi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:17:30