为何AWS ALB的301重定向对type=module脚本不生效?
AWS ALB 301重定向对type=module脚本请求失效的问题解答
是否属于设计如此?
这不是AWS ALB的设计限制,问题根源在于浏览器对ES模块脚本请求的特殊处理逻辑。当浏览器加载type=module的脚本时,会先发起OPTIONS预检请求(CORS机制要求),如果你的ALB重定向规则仅匹配GET/HEAD这类常规请求方法,没有覆盖OPTIONS,预检请求就无法触发重定向,浏览器会直接终止后续流程,不会发起实际的GET请求去执行重定向。
解决方法
1. 扩展ALB重定向规则的请求方法覆盖范围
修改ALB的重定向规则,让它匹配包括OPTIONS在内的所有相关请求方法:
- 登录AWS控制台,进入目标ALB的监听器规则页面
- 找到你的301重定向规则,点击编辑
- 在规则条件中,添加"请求方法"条件,选择"匹配以下任意一项",并勾选
OPTIONS、GET、HEAD - 保持重定向操作的配置(状态码301,目标URL为test2)不变,保存规则
2. 校验CORS配置(跨域场景下)
如果test1和test2属于不同域名,需确保ALB或后端服务返回正确的CORS响应头:
- 配置
Access-Control-Allow-Origin为允许的请求来源(生产环境避免用*) - 配置
Access-Control-Allow-Methods包含GET、OPTIONS等必要方法 - 配置
Access-Control-Allow-Headers匹配脚本请求携带的头信息
3. 清除浏览器缓存
301是永久重定向,浏览器可能缓存了旧的响应记录,导致测试不生效:
- 打开浏览器开发者工具(F12),在"网络"面板勾选"禁用缓存",然后刷新页面测试
- 手动清除浏览器对应域名的缓存数据
内容的提问来源于stack exchange,提问作者Jeff Strauss
相关产品推荐
相关产品推荐

