0

我正在尝试使用 WinJS 库和 Visual Studio 2012(更新 1)在 Windows 8 上进行应用程序开发,并且在使用 WinJS.xhr 缓存来自我在我的应用程序中查询的外部 REST API 的响应时遇到了困难。

我通过修改服务器以发送将“Expires”标头设置为值“0”的响应来部分解决了该问题。

但是,在我修改服务器的响应标头之前,缓存中仍然存在旧响应,现在可以追溯到两天前。我不知道如何清除与 WinJS.xhr 关联的缓存——有没有一种编程方式可以做到这一点?隐藏在 Visual Studio 中的选项/工具?

4

1 回答 1

0

发送带有如下If-Modified-Since标头的请求:

WinJS.xhr({ 
    url: "http://www.microsoft.com",
    headers: {
        "If-Modified-Since": "Mon, 27 Mar 1972 00:00:00 GMT"
    } })
    .done(function complete(result) {
        // Report download.
        xhrDiv.innerText = "Downloaded the page";
        xhrDiv.style.backgroundColor = "#00FF00";
});

链接关闭页面,可在此处If-Modified-Since找到其他标题。重要的是标题。此处的其他缓存指令包括:CACHE-CONTROL

Cache-Control   = "Cache-Control" ":" 1#cache-directive

cache-directive = cache-request-directive
     | cache-response-directive

cache-request-directive =
       "no-cache"                          ; Section 14.9.1
     | "no-store"                          ; Section 14.9.2
     | "max-age" "=" delta-seconds         ; Section 14.9.3, 14.9.4
     | "max-stale" [ "=" delta-seconds ]   ; Section 14.9.3
     | "min-fresh" "=" delta-seconds       ; Section 14.9.3
     | "no-transform"                      ; Section 14.9.5
     | "only-if-cached"                    ; Section 14.9.4
     | cache-extension                     ; Section 14.9.6

 cache-response-directive =
       "public"                               ; Section 14.9.1
     | "private" [ "=" <"> 1#field-name <"> ] ; Section 14.9.1
     | "no-cache" [ "=" <"> 1#field-name <"> ]; Section 14.9.1
     | "no-store"                             ; Section 14.9.2
     | "no-transform"                         ; Section 14.9.5
     | "must-revalidate"                      ; Section 14.9.4
     | "proxy-revalidate"                     ; Section 14.9.4
     | "max-age" "=" delta-seconds            ; Section 14.9.3
     | "s-maxage" "=" delta-seconds           ; Section 14.9.3
     | cache-extension                        ; Section 14.9.6

这里

有时,用户代理可能希望或需要坚持让缓存重新验证其与源服务器的缓存条目(而不仅仅是沿着通往源服务器的路径的下一个缓存),或者从源服务器重新加载其缓存条目。如果缓存或源服务器高估了缓存响应的到期时间,则可能需要端到端重新验证。如果缓存条目由于某种原因已损坏,则可能需要端到端重新加载。

特定的端到端重新验证

该请求包括一个“max-age=0”缓存控制指令,该指令强制每个缓存沿着到源服务器的路径重新验证其自己的条目(如果有的话)与下一个缓存或服务器。初始请求包括一个带有客户端当前验证器的缓存验证条件。

于 2013-01-26T22:23:31.450 回答