模型交付

校验 Android AI 模型下载的重定向链

在自动重定向后的正文进入临时文件前,验证来源主机、协议、响应类型、范围与制品修订。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-04 · Fact IDs: COVE-DOWNLOAD-01, COVE-MODEL-02

直接回答

模型下载器应把重定向视为需要检查的响应路径变化,而不是目标来源已可信的证明。记录原始制品身份、每一跳的重定向状态与目标、最终协议和主机、响应状态、内容类型、范围元数据,以及客户端预期的发布信息。若目标超出已记录的来源策略、协议意外降级、响应格式异常,或正文无法绑定到同一制品修订,就应拒绝。之后才能决定是否写入或续传字节。TLS 连接成功只能按平台信任链验证重定向主机,不证明它获得了分发此模型的授权。 本地 ModelDownloader 当前配置 HttpURLConnection 自动跟随重定向,随后接受 HTTP 200 或 206。源码会在建立连接后记录最终 URL,但没有实现主机白名单,也没有在写入流之前检查 Content-Type。Range 请求按临时文件长度计算;事实卡记录了请求续传和临时文件写入。代码和事实卡都没有显示一套完整的、绑定验证器并处理跨来源跳转的策略。这是源码审查的观察,不表示应用已经收到恶意重定向,也不表示配置端点已经被攻破。可靠指南应说明需要验证的条件,而不是把某种错误说成常见问题。 不同重定向状态的语义并不完全相同。有些状态会保留请求方法;另一些历史行为会改变客户端方法处理;不同客户端对头信息和凭据的转发也可能不同。即使当前请求没有用户凭据,可复用的下载器也不应假设将来的调用永远匿名。除非安全设计明确许可,否则不要把 Authorization 或 Cookie 转发给不同来源。不要把长期令牌放在可能进入日志的查询参数中。按发布策略核对协议、主机、端口和允许的路径关系;未知目标应终止,而不是无限跟随跳转链。 仅凭响应状态码不足以判断正文。门户或代理可能返回 HTTP 200 的网页;镜像可能返回另一修订的模型;服务器可能忽略 Range 并返回完整 200;如果下载器需要 identity 编码,内容编码变化也可能使偏移语义不明确。应检查状态、内容类型、长度、范围起止、表示形式总长度、验证器,以及有可信元数据时的最终摘要。续传响应范围必须从持久化偏移开始,并属于同一表示形式。否则应使用新的临时文件或拒绝该尝试。不要先追加、后检查。 来源策略应明确且可以维护。在发布元数据中固定仓库所有者和不可变修订;如果允许镜像,列出精确来源并定义如何校验字节身份。过宽的后缀规则可能误授权无关主机;只固定单一主机又可能让合法来源调整必须依赖应用升级。优先采用签名或其他可信元数据来说明制品身份及允许来源,但只有实现实际完成签名验证时才能宣称已经验证签名。当前代码里配置第二个镜像 URL,并不能证明其内容与主站相同。面向用户的错误应说明响应被策略拒绝,但不要泄露带隐私参数的完整 URL 或原始响应正文。 使用受控本地或测试服务器,而不要对真实用户下载端点做攻击性测试。夹具应覆盖同源跳转、批准镜像跳转、未批准主机、HTTPS 降级到 HTTP、跳转循环、状态为 200 的 HTML、404/5xx、范围无效或被忽略、制品修订变化、正文截断以及敏感头处理。每种情况下都应检查没有联系未授权主机、未信任正文没有进入最终路径、部分数据按策略保留或丢弃、原活动模型不变。隐私安全的诊断可以记录最终主机和响应类别。只通过单一端点走通正常下载,不能证明重定向策略完整。 ### 操作步骤 1. 写明来源策略。记录权威制品仓库、固定修订、允许镜像、协议、主机、端口和路径约束;任何策略变化都进入发布审核。 2. 显式决定如何跟随跳转。可以关闭自动跟随并逐跳验证,也可采用能够暴露足够信息的客户端规则来执行来源及凭据策略。限制跳数,拒绝协议降级和未预期来源。 3. 写入前校验响应。检查状态码、内容类型、范围元数据、长度、编码规则、最终表示身份,以及是否存在可信摘要。只有响应与保存的偏移和修订一致时,才打开追加流。 4. 隔离候选文件。只写入绑定修订的临时路径,保留已活动且通过验证的模型;候选通过所需检查后再提升。发生不匹配时只隔离或删除候选数据,不动用户资料。 5. 用对抗性夹具测试并审查日志。覆盖跳转、门户网页、陈旧镜像、循环和范围错误;确认诊断不包含凭据、私密输入或敏感 URL 参数。 ### 验收标准 - 信任响应正文之前,每一跳目标都符合已记录的协议、来源主机和制品来源策略。 - 敏感认证材料不会被转发到未批准来源;协议降级和跳转循环受到限制并有测试。 - 写入或追加字节之前,已检查状态、内容类型和范围元数据。 - 被拒绝的响应不能替换活动模型或被标记就绪;错误处理保留无关用户数据并提供可恢复状态。 ### 比较 | 检查 | 能说明什么 | 不能说明什么 | |---|---|---| | 与最终主机建立 TLS | 该连接按平台证书信任规则验证了主机 | 该主机获准分发请求的制品 | | HTTP 状态和内容类型 | 对响应做基础分类 | 精确制品身份或所有字节均完整 | | 固定修订与可信摘要 | 元数据可用且通过校验时,确认来源与字节匹配 | 模型兼容性或设备推理性能 | ### 常见问题 **所有 HTTPS 重定向都可以跟随吗?**不可以。HTTPS 只保护与各主机之间的连接,并不会自动授权每个主机分发模型。要按发布来源策略检查整条链,也不要在未获准时跨来源转发敏感凭据。 **HTTP 200 能否说明响应一定是模型文件?**不能。门户或代理可以返回状态正常的 HTML 页面。必须检查内容类型和制品元数据,并在提升候选文件之前验证实际字节。 **续传请求重定向到另一个镜像怎么办?**只有镜像已获准、响应证明属于同一固定表示形式并且范围正确时才可接受。否则应拒绝或隔离部分候选文件,并且只有发布策略允许时才重新开始。 **文件长度相同能证明重定向下载正确吗?**不能。长度能发现部分截断,但不能认证发布者,也不能证明字节一致。应使用可信的制品身份,并在有可信摘要时执行校验。

续传请求抵达了非预期主机

模型传输中断后,设备已经保存部分字节。重试时,自动跳转把请求带到镜像或中间节点。应用必须先判断最终响应是否属于相同制品,才能决定是否追加临时文件。

决策

根据已记录来源策略校验跳转链及最终响应,再匹配范围与制品元数据后写入。评估候选期间保留原活动模型。

预期结果

客户端要么接受获准且匹配的表示形式,要么拒绝响应;不会混合字节、泄露凭据或替换可用模型。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • 原始制品身份和允许来源清单
  • 各重定向目标及最终响应
  • 范围、正文与候选文件状态

收到完整字节流还不够;最终落盘、完整性、运行时加载和恢复路径也必须验证。

实施流程

  1. 定义允许的制品来源. 记录权威仓库、不可变修订、允许镜像、HTTPS 规则、主机与端口约束以及路径范围。不要将任意子域名或重定向返回的每个 URL 自动视为批准来源。
  2. 检查每一跳. 采用能暴露跳转状态和目标的客户端流程,或采用具有同等约束能力的文档化策略。限制跳数,拒绝降级到明文协议;跨来源转发认证信息必须经过明确批准。
  3. 写入前分类最终响应. 检查状态、内容类型、编码、长度、范围起止、表示形式总量和制品修订。门户 HTML 或意外完整响应都应被拒绝,不得当作模型字节。
  4. 保护续传和活动文件. 追加前匹配响应表示形式、范围和已有偏移。只写入隔离且绑定修订的临时文件;所需完整性和加载检查通过前,保留活动模型不变。
  5. 运行受控跳转测试. 在测试服务上覆盖批准与禁止主机、循环、状态变化、HTML 正文、忽略范围、镜像版本不符、截断及敏感请求头处理,并检查网络访问和最终文件。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 信任响应字节之前,每个重定向及最终来源都符合显式来源策略。
  • 续传前验证范围和制品身份;未经批准或版本变化的表示形式不会被追加。
  • 认证凭据不会发送给未授权主机,明文降级会被拒绝。
  • 被拒绝响应不会替换活动制品,也不会删除无关用户数据。

决策对照表

维度选择或证据解读方式
TLS 校验连接保护按平台信任规则验证主机,但不会授权其成为模型来源。
状态码和内容类型响应分类可以发现部分门户或服务器响应,但不能证明字节身份。
固定来源与摘要制品验证可信元数据可用时,将预期来源与实际内容关联起来。

需要避免的失败模式

  • 将任何 HTTPS 主机视为授权模型来源
  • 把门户网页的 HTTP 200 当成模型数据
  • 未核对版本便把响应追加到旧部分文件

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

下载器可以跟随所有 HTTPS 跳转吗?

不可以。HTTPS 保护到某个主机的连接,却不会授权该主机分发模型。必须检查每一跳,且没有明确策略时不能跨来源转发凭据或继续请求。

HTTP 200 是否能证明响应是模型文件?

不能。门户或代理可能返回状态成功的 HTML。应先检查内容类型和制品元数据,再在提升候选文件前验证字节,并保留被拒绝原因。

续传请求能否改用另一个镜像?

只有镜像获得允许,而且响应证明是同一固定表示及正确范围时才可以。否则拒绝或隔离部分候选,之后仅按发布策略重新开始。

文件长度相同是否说明下载正确?

不能。长度能发现部分截断,却不能认证发布者或证明字节相同。要使用可信制品身份,并在可用时验证可信摘要及响应修订。