# 对象访问方式：公开读与签名 URL

## 两种模式

<table id="bkmrk-%E5%85%AC%E5%BC%80%E8%AF%BB-%E7%AD%BE%E5%90%8D-url%EF%BC%88%E7%A7%81%E6%9C%89%EF%BC%89-%E5%8E%9F%E7%90%86-%E6%A1%B6%E5%85%81"><thead><tr><th></th><th>公开读</th><th>签名 URL（私有）</th></tr></thead><tbody><tr><td>原理</td><td>桶允许匿名 GET，地址永久有效</td><td>桶拒绝匿名，地址带签名与过期时间</td></tr><tr><td>适合</td><td>内容站、无付费墙</td><td>付费内容、隐私文件</td></tr><tr><td>缓存</td><td>可以长缓存（默认 30 天）</td><td>签名会过期，页面缓存时长必须小于签名有效期</td></tr><tr><td>风险</td><td>知道地址就能下载</td><td>签名算法暴露密钥？不会——签名只在服务端计算</td></tr></tbody></table>

## Cache-Control

对象写入时的 `Cache-Control` 响应头决定 CDN 与浏览器缓存：留空用智能默认（公开读 30 天 / 签名 1 小时），也可以自定义如 `public, max-age=604800`。改设置只影响新上传的对象，存量对象要重新覆盖或用厂商工具改头。

## 签名模式的重要提醒

开了签名访问后，页面缓存（含 CDN 的 HTML 缓存）里存的签名地址会随时间失效。规则：**页面缓存时长 ≤ 签名有效期的一半**。默认签名 1 小时，页面缓存最长 30 分钟，否则访客会看到裂图。

## 切换模式

公开读 ↔ 签名可以随时切，地址改写是渲染期的。但桶的匿名权限要自己在云控制台改：公开读要求桶策略允许匿名 GET；签名模式建议桶设为私有。

---