0

WinJS ライブラリと Visual Studio 2012 (Update 1) を使用して Windows 8 でのアプリ開発に取り組んでいますが、アプリ内からクエリを実行している外部 REST API からの WinJS.xhr キャッシュ応答で問題が発生しています。

「Expires」ヘッダーを値「0」に設定して応答を送信するようにサーバーを変更することで、問題を部分的に修正しました。

ただし、サーバーの応答ヘッダーを変更する前の古い応答がまだキャッシュに残っており、現在は 2 日前までさかのぼります。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追加のヘッダーはhereにあります。重要なのは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 に答える