HTTP 缓存


HTTP 缓存

如果您的 Web 应用处理任何可识别个人身份的消费者信息或任何其他敏感信息,请务必考虑浏览器缓存的影响。

注意:​ 此页面上引用的开发材料和工具由第三方而非亚马逊提供。这些工具的链接会将您带到第三方网站。

一般最佳实践

每当信息从服务器发送到浏览器时,默认行为是缓存响应以加快未来访问速度。虽然速度很重要,但安全性更重要。缓存的信息可以由浏览器在设备上持久存储,使其在设备受到攻击时易受攻击;恶意应用可能会访问缓存的数据。

大多数情况下,像静态图形这样的资产,浏览器可以安全缓存。作为最佳实践,您不应缓存登录后保护的任何信息。这可能会导致信息无意中提供给恶意应用。

为了确保浏览器(本机浏览器或 Webview)不会持久存储来自 Web 服务器的响应,请将以下标头添加到所返回的 HTTP(s) 响应中。

Cache-Control: no-cache

Cache-Control: no-store

更多信息可以在 HTTP 规范第 14.9 节中找到。

为了向后兼容,还应该包含一个 no cache 特殊指令。

Pragma: no-cache

其他信息可以在 HTTP 规范的第 14.32 节找到。

将这些标头包含在响应中的说明应该位于 Web 服务器文档中或用于对应用编码的编程框架中。

Cookie 和安全性

如果您使用 SSL 来保护您和您的用户之间通信的安全性,还必须确保您存储的 Cookie 不会通过意外的方式使用。例如,如果您在 Cookie 中保存登录令牌,则应将该 Cookie 标记为安全。同样,如果服务器发送的 Cookie 不应该被页面上运行的 JavaScript 访问,它应该被标记为 HttpOnly,以防止某些类别的跨站点脚本攻击。(注意:​ HttpOnly Cookie 是 HTML5 规范的一部分。)

有关安全 Cookie 的更多信息,请访问用于状态管理的 HTTP 规范

HttpOnly Cookie 是 HTML5 规范中正在进行的工作。

亚马逊 Web 应用缓存 API

如果您的 Web 应用由亚马逊分发,您可以使用可用的 API 清除嵌入式浏览器的缓存。例如,当用户退出您的应用时,您可以强制从设备中清除任何保存的数据。虽然这不能取代一开始不缓存关键信息,但它可以成为一个有用的工具,以确保您尽一切可能通过保护客户的数据来保护客户的信任。

亚马逊 Web 应用缓存对象

在调用任何亚马逊 Web 应用缓存 API 之前,请务必检查该对象是否存在。如果您的应用在没有包装器的情况下运行,这将确保使用正确的功能。

document.addEventListener("amazonPlatformReady", function() {
                        if (amzn_wa.Cache != null) {
                            // 下面记录了调用 API
                        }
                    });

对亚马逊 Web 应用缓存对象的任何调用都只会影响封装的应用。其他 Web 应用和本机浏览器将不受影响。

亚马逊 Web 应用缓存方法如下:

  • amzn_wa.Cache.clearAppCache() - 清除资源缓存。
  • amzn_wa.Cache.clearFormData() - 清除保存的任何 Web 窗体数据。
  • amzn_wa.Cache.clearHistory() - 告诉嵌入式浏览器清除其内部后退/前进列表。
  • amzn_wa.Cache.clearAllCookies() - 清除嵌入式浏览器中的所有 Cookie。
  • amzn_wa.Cache.clearExpiredCookies() - 强制从嵌入式浏览器中删除过期的 Cookie。(这些不会通过请求发送到服务器,但可以保留在设备上,直到垃圾回收删除它们)。
  • amzn_wa.Cache.clearSessionCookies() - 从嵌入式浏览器中清除所有会话 Cookie。如果在最初创建 Cookie 时没有使用过期日期,则会话 Cookie 存在。