- - PR -
TransferとRedirectでブラウザキャッシュの違いについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-14 11:19
表題の件につきまして、ご教授いただきたいことがございます。
A.aspxとB.aspxを用意し、下記の通り画面を作成します。 ---------------------------------------------- A.aspx(画面A) コントロール ・TextBox ・Button1 ・Button2 イベント ・Button1_Clickイベント TextBoxに入力された内容をセッションへ格納後、RedirectでA.aspxへ遷移 ・Button2_Clickイベント TextBoxに入力された内容をセッションへ格納後、TransferでB.aspxへ遷移 B.aspx(画面B) コントロール ・Label イベント ・Page_Loadイベント 非PostBack時にセッションに格納されているデータをLabel.Textへ格納 ---------------------------------------------- 1.ブラウザで画面Aを表示後、Ctrl+Nでブラウザをもう1画面立ち上げます。 (以降、初めに起動したブラウザをブラウザA、Ctrl+Nで起動したブラウザをブラウザBとします) 2.ブラウザA・画面AのTextBoxに対し、「TESTA」と入力後、RedirectでB画面へ遷移します。 ブラウザA・画面BのLabelに「TESTA」と表示されます。 3.ブラウザB・画面AのTextBoxに対し、「TESTB」と入力後、RedirectでB画面へ遷移します。 ブラウザB・画面BのLabelに「TESTB」と表示されます。 4.ブラウザA・画面Bにて、ブラウザの戻るボタンをクリックし、A画面へ戻ります。 5.ブラウザA・画面Aにて、ブラウザの進むボタンをクリックすると、画面BのLabelには「TESTB」と表示されます。 1〜5の操作をTransferで遷移した場合、5.のブラウザA・画面BのLabelには「TESTA」と表示され、 Redirectで遷移した場合とブラウザキャッシュの表示内容が異なります。 (4.5.での戻るボタン、進むボタンはサーバへアクセスしていないことは確認済みです) Redirectで遷移した場合でも、画面BのLabelに「TESTA」と表示させる方法を模索しており、 DateTimeをクエリ文字列に付加し、Redirectを行った場合は画面Bで「TESTA」と表示されることを確認しております。 ただ、不要なクエリ文字列を付加せずに他に方法は無いものでしょうか? ご教授の程、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-03-14 11:31
Transfer は、サーバ内で処理を行います。現在のページの処理を打ち切り、遷移先のページの処理を呼び出します。従って、クライアントは、遷移したことを知りません。 Redirect は、クライアントの処理をさせます。現在のページを打ち切り、リダイレクトする HTML を送り返します。クライアントが遷移先のページを要求する処理を、サーバに対して行います。 (HTTP のヘッダ内だけの話かもしれない) この説明で、ブラウザのキャッシュが異なる理由がわかりますでしょうか。処理が違うと言うことと、どういうときにどっちを使うかを考えた上で、質問をし直してください。 [ メッセージ編集済み 編集者: Jitta 編集日時 2007-03-14 11:32 ] | ||||||||
|
投稿日時: 2007-03-14 12:37
キャッシュを表示したくないというのは多く聞きますが、逆にキャッシュを表示したいとは珍しい事例ですね。
何故そうしたいのかが明確でないので何とも言えませんが、クライアントのキャッシュに依存した設計にしないのが大概において吉です。 クライアントにキャッシュを残す残さないの指示をページ内で行う事ができますが、はっぱをかける程度と認識しておいた方がよいでしょう。キャッシュするかどうかはクライアントの自由だからです。
Redirect の場合は、4.5.での戻るボタン、進むボタンはサーバへアクセスしてますよね? _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2007-03-14 15:29
Jittaさま、囚人さま
ご返信ありがとうございます。
処理の違いにつきましては理解していたつもりですが、Transferを使用したときのブラウザキャッシュがよく理解できません。(キャッシュされないのでしょうか?)
いえ、Redirectの場合でもサーバへはアクセスしていないようです。 LANケーブルを抜いて試してみましたが、ブラウザキャッシュが表示されます。 | ||||||||
|
投稿日時: 2007-03-14 15:37
a.aspx(.cs なり vb)の中で、Server.Transfer("b.aspx", ...) をします。 このとき、サーバの中で b.aspx が処理され、クライアントは a.aspx をリクエストしたのに、b.aspx を受け取ることになります。 Redirect だと、サーバは「b.aspx へ再度リクエストしなさい」とレスポンスを送ります。そしてクライアントは、b.aspx をリクエストします。 Tranfer したときには、b.aspx が表示されていますが、クライアントは a.aspx を表示しているつもりなんです。なので、キャッシュ云々の話じゃないです。 Reddirect と Transfer で、ブラウザに表示されるアドレスを、よく見てください。 _________________ | ||||||||
|
投稿日時: 2007-03-14 16:28
ご回答頂き大変恐縮なのですが、Transferの場合にブラウザのURLが変更されないのは認識しております。 自分が理解できていない点としまして、Transferしたときにb.aspxが表示され、その画面からブラウザの戻るボタンで戻った画面で表示されている内容は何か?ということになります。 | ||||||||
|
投稿日時: 2007-03-14 17:56
そもそも、同じURLにアクセスしてるのにブラウザはどうやってキャッシュを分ければいいのでしょう。 ブラウザがウインドウごとにキャッシュをもつ仕様にでも変わってくれるしかありません。 いやでもtransferの場合は同じURLなのに、、、と思うかもしれません。 でもpostしているデータが違います。(redirectの場合、画面Bはgetで作られたページです) ためしに、同じデータをpostするようにしてみてください。区別するために、ラベルには [セッションデータ+現時刻]でも表示するようにして。少なくとも私の環境では、 transferした場合でも、ブラウザAで「ブラウザBで作られたキャッシュ」を見るようになる ことが確認できました。 |
1