3

データを取得するために http GET を実行しています。IXMLHTTPRequest2 を使用しています。

URL "http://foo.com" (curl "http://foo.com") を取得すると、この URL を 2 回目に取得すると、サーバー上のコンテンツが実際に変更されますが、取得しているのはキャッシュされた結果。

キャッシュは URL のみを優先するように見えるため、同じ URL で異なるヘッダーを使用しても、キャッシュされた結果は同じです。「Cache-Control: no-cache」、「Cache Control: no-store」、および「Pragma: no-cache」を試しました。それらのどれも API によって尊重されません。

キャッシュをオフにしたり歩き回ったりする方法はありますか? (私が使用している 1 つのウォークアラウンドは、URL の末尾にゴミを追加することですが、私はそれが苦手です)。

4

2 に答える 2

3

私の質問はPrashantによってここで答えられました:

リクエストに「If-Modified-Since」HTTP ヘッダーを設定し、過去の時間を設定することで、XHR に最新のコンテンツを強制的に取得させることができます。サーバーの応答を制御できる場合は、値 0 または過去の日付を含む Expires HTTP 応答ヘッダーを返すことができます。これにより、XHR が最新の応答を取得するようになります。

上記のいずれかを実行するだけで済みます。クライアント側とサーバー側の両方のコードを変更する必要はありません。

クライアント側のコードは、次のように変更できます。

xhr->Open(...)
xhr->SetRequestHeader(L"If-Modified-Since", L"Sat, 01 Jan 2000 00:00:01 GMT");
xhr->Send(...)

サーバー側のコードが ASP.net に基づいている場合にサーバー側の動作を変更するには、次のように応答ヘッダーを変更できます。

Response.Headers.Add("Expires", "0")
于 2012-10-30T19:24:07.803 に答える
0

私はあなたがソケットを使う必要があると思います.....私はこれらの2つのリンクが役立つはずだと思います

C#WebClientはキャッシュを無効にします

.NetでHTTPリクエストを手動で作成するにはどうすればよいですか?

于 2012-10-30T07:24:24.960 に答える