「通常の」ブラウザ要求と、要求された同じ URL に対する AJAX 要求に対して異なるコンテンツを提供することになっているアプリケーションを開発しています。(実際、リクエストが AJAX の場合は、レスポンス HTML を JSON オブジェクトにカプセル化します)。
この目的のために、サーバー側で AJAX 要求を検出し、応答を適切に処理しています。以下の擬似コードを参照してください。
function process_response(request, response)
{
if request.is_ajax
{
response.headers['Content-Type'] = 'application/json';
response.headers['Cache-Control'] = 'no-cache';
response.content = JSON( some_data... )
}
}
問題は、現在表示されている URL への最初の AJAX 要求が行われたときに、Google Chrome で奇妙なことが起こることです。応答が来て JavaScript によって処理された直後に、ユーザーが何らかのリンク (静的で、他のページにリダイレクトする) をクリックすると、次に、ブラウザーの [戻る] ボタンをクリックすると、レンダリングされた Web サイトではなく、返された JSONコードが表示されます (サーバーをログに記録すると、要求が行われていないと言えます)。Chrome は特定の URL に対する最新のリクエスト応答を保存しているように思えますが、異なるコンテンツ タイプなどを考慮していません。
それは Chrome のバグですか、それともHTTP プロトコルを誤用していますか?
--- 2012 年 11 月 12 日更新、12:38 UTC
PatrikAkerstrand の回答に従って、次の Chrome バグを見つけました: http://code.google.com/p/chromium/issues/detail?id=94369
この動作を回避する方法はありますか?