为何navigator.sendBeacon()不遵循PHP返回的Refresh头重定向规则?
sendBeacon对Refresh跳转头的支持说明
结论
不存在任何可额外添加的响应内容,能让navigator.sendBeacon()识别并遵循Refresh头的跳转规则。
原因解释
navigator.sendBeacon()的底层请求逻辑遵循Fetch规范的重定向处理规则,仅支持标准HTTP 3xx状态码搭配Location响应头的重定向形式,从规范层面就没有设计对Refresh头的解析处理逻辑。Refresh本身不属于HTTP标准定义的重定向机制,它是早期浏览器推出的非标准扩展,设计初衷是控制浏览器渲染完页面后,等待指定时长再做整个页面的跳转,原本就不适用于sendBeacon这类后台静默请求场景。
替代实现方案
如果需要让sendBeacon正常遵循重定向,直接使用标准的3xx状态码+Location头的实现即可,PHP示例代码如下:
// 可根据业务需求将302替换为301/303/307/308等符合要求的重定向状态码 header('Location: https://destination.url', true, 302);
内容的提问来源于stack exchange,提问作者Lucas Araujo
相关产品推荐
相关产品推荐

