近日,多位Google Workspace企业级用户反馈,在使用Google Apps Script部署Web应用时,即使开发者已经对后端代码进行了明确更新并重新部署,用户端访问仍然显示旧版本的HTML内容,缓存机制似乎“顽固”地拒绝刷新。这一问题在Google Workspace域名环境下尤为突出,严重影响了依赖Apps Script进行快速原型开发和内部分发工具的团队效率。
问题重现:更新代码却无变化
一位来自大型科技企业的开发者向媒体反映,其团队在Google Apps Script编辑器中修改了Web App的doGet()函数,调整了HTML输出中的动态数据字段,并点击“部署”按钮选择“新建版本”后,再次通过已发布的Web App URL访问时,浏览器依然呈现修改前的页面内容。反复刷新、强制清除浏览器缓存(Ctrl+F5)、甚至更换设备访问均无法解决。
“我们怀疑是Google服务器端或中间代理层对旧版本进行了深度缓存,”该开发者表示,“传统清除客户端缓存的方法完全无效,必须等待数小时甚至一天后,新版本才会偶然生效。”这一问题在Google Workspace域名(如yourcompany.com)下尤其明显,而个人Gmail账号部署的Web App似乎受影响较轻。
技术根源:多层缓存与版本控制机制冲突
根据Google官方文档,Apps Script Web App的部署遵循“版本—部署”模型:开发者必须先在脚本编辑器中保存一个版本(File > Manage Versions),然后将该版本部署到Web App(Deploy > New Deployment)。然而,许多用户误认为直接保存并点击“部署”中的“更新”按钮即可生效,但实际部署指向的版本号并未更新,导致旧版本HTML被持续服务。
更深层的原因在于Google的CDN(内容分发网络)和边缘缓存策略。Web App的HTML输出会被Google的基础设施缓存,TTL(生存时间)可能长达30分钟甚至更久。对于Google Workspace域,域管理员可能启用了额外的代理缓存策略(如强制SSL或自定义安全规则),进一步延长了缓存有效期。此外,部分企业网络环境中使用的代理服务器或防火墙也可能会对Apps Script的响应进行二次缓存。
广泛影响:从原型验证到客户演示均受阻
这一故障不仅影响开发调试效率,更波及实际业务场景。例如,一家咨询公司使用Apps Script构建客户报表生成器,在修改了HTML模板后,客户连续两天看到错误报表,导致信任危机。另一家教育科技公司利用Web App作为课程注册入口,更新报名截止日期后,学生仍能通过旧页面提交过期报名,造成管理混乱。
受影响用户的共同特征包括:在Google Workspace域下部署、使用自定义域名映射或私有访问权限(仅组织内用户可访问)、以及将Web App嵌入到Google Sites或第三方iframe中。其中,自定义域名映射被认为是触发缓存问题的关键因素——Google会为映射域名单独生成缓存层级,而这一层级无法通过常规手段清除。
临时解决方案与长期建议
针对当前问题,社区和官方支持已总结出几项可行方案:
- 强制新部署:在脚本编辑器中创建一个新的“版本”,并重新选择“新建部署”(New Deployment),而非使用“更新现有部署”。新部署会获得全新URL(末尾ID不同),并绕开旧缓存。
- 使用版本号后缀:在Web App URL后手动添加查询参数(如
?v=2),部分情况可绕过CDN缓存,但并非万全之策。 - 调整响应头:在
doGet()函数中显式设置Cache-Control头为no-cache, no-store, must-revalidate,并添加Expires头为过去日期。示例代码:javascript function doGet(e) { var output = HtmlService.createHtmlOutput('<html>...</html>'); output.addMetaTag('Cache-Control', 'no-cache, no-store'); output.addMetaTag('Expires', '0'); return output; } - 联系Google Workspace支持:对于企业用户,可请求域管理员在Google Admin控制台中检查“Apps脚本”设置,尝试关闭“强制缓存”相关选项(如有)。
长期来看,Google应改进Apps Script的部署缓存策略,例如允许开发者通过API手动清除指定部署的CDN缓存,或提供更短的TTL选项。目前,官方在社区论坛中已确认该问题正在调查,但尚未给出修复时间表。
结语
Apps Script作为Google Workspace生态中轻量级后端工具,其Web App功能本应支持快速迭代。但当前缓存机制与版本控制的脱节,无疑给开发者带来了额外负担。建议团队在关键Web App上线前,通过“新部署+URL重定向”的方式规避风险,并持续关注Google Workspace更新日志中关于缓存控制的改进。