6

状況は次のとおりです。

リソースのリストのリクエストに応答するWebアプリケーションがあります。

/items

これは最初、そのパスに移動することにより、Webブラウザによって直接要求されます。ブラウザは「text/html」を含む標準の「Accept」ヘッダーを使用し、アプリケーションはこれに気づき、アイテムリストのHTMLコンテンツを返します。

返されるHTMLには、JavaScript(jQuery)が含まれています。JavaScript(jQuery)は、実際のデータを取得するためにajaxリクエストを実行します。

/items

今回のみ、「Accept」ヘッダーが明示的に「application/json」に設定されます。繰り返しますが、私のアプリケーションはこれに気づき、JSONがリクエストに正しく返され、データがページに挿入され、すべてが満足のいくものになります。

ここに問題があります:ユーザーは別のページに移動し、後で戻るボタンを押します。次に、ファイルを保存するように求められます。これは、アイテムリストのJSONデータであることがわかります。

これまでのところ、これがGoogleChromeとFirefox3.5の両方で発生することを確認しました。

ここでは、2つの可能なタイプの回答があります。

  1. どうすれば問題を解決できますか。キャッシュコントロールヘッダーの魔法の組み合わせ、またはブラウザがここで正しいことをする原因となる他のブードゥーはありますか?

  2. 私がここでひどく間違ったことをしていると思うなら、どうすればいいですか?私は正確さを求めていますが、柔軟性を犠牲にしないようにもしています。

それが役立つ場合、アプリケーションはRestlet2.0m4を使用するJAX-RSWebアプリケーションです。役立つ場合は、サンプルの要求/応答ヘッダーを提供できますが、問題は完全に再現可能であると思います。

4

3 に答える 3

6

キャッシュコントロールヘッダーの魔法の組み合わせ、またはブラウザがここで正しいことをする原因となる他のブードゥーはありますか?

異なるAccept:ヘッダーに対して異なる応答を提供する場合は、ヘッダーを含める必要があります。

Vary: Accept

あなたの応答で。Varyヘッダーには、応答に影響を与える他の要求ヘッダーも含める必要があります。たとえば、gzip / deflate圧縮を行う場合は、Accept-Encodingを含める必要があります。

IEは、残念ながらVary、キャッシュを完全に壊して、不十分な値の多くの値を処理します。これは、あなたにとって重要である場合とそうでない場合があります。

私がここでひどく間違ったことをしていると思うなら、どうすればいいですか?

同じURLで異なるタイプの異なるコンテンツを提供するという考えはひどく間違っているとは思いませんが、実際に必要な以上の互換性の問題に身を任せています。JSONを介して機能するヘッダーに依存することは、実際には実際には素晴らしいアイデアではありません。/items/jsonまたはなどの別のURLを使用するのが最善です/items?format=json

于 2009-09-23T14:35:08.247 に答える
1

私はこの質問が古いことを知っていますが、誰かがこれに遭遇した場合に備えて:

私はjQueryを使用するRailsアプリケーションでこれと同じ問題を抱えていましたが、別の質問に対するここで与えられた解決策でJSON応答をキャッシュしないようにブラウザーに指示することで修正しました。

jQuery $ .getJSONは、コントロールごとに1回だけ機能します。サーバーに再度到達しません

この問題は、ChromeとFirefoxでのみ発生するようでした。Safariは、キャッシュしないように明示的に指示しなくても、バック動作を正常に処理していました。

于 2011-05-17T08:53:12.617 に答える
0

古い質問ですが、これを見ている他の人にとっては、質問者によるAcceptヘッダーの使用に問題はありません。

これはChromeで確認されたバグです。(以前はFirefoxでもありましたが、修正されました。)

http://code.google.com/p/chromium/issues/detail?id=94369

于 2012-10-24T09:30:00.423 に答える