- PR -

TransferとRedirectでブラウザキャッシュの違いについて

1
投稿者投稿内容
おちゃねこ
会議室デビュー日: 2007/03/12
投稿数: 3
投稿日時: 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」と表示されることを確認しております。
ただ、不要なクエリ文字列を付加せずに他に方法は無いものでしょうか?

ご教授の程、よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-03-14 11:31
引用:

TransferとRedirectでブラウザキャッシュの違いについて


 Transfer は、サーバ内で処理を行います。現在のページの処理を打ち切り、遷移先のページの処理を呼び出します。従って、クライアントは、遷移したことを知りません。

 Redirect は、クライアントの処理をさせます。現在のページを打ち切り、リダイレクトする HTML を送り返します。クライアントが遷移先のページを要求する処理を、サーバに対して行います。
(HTTP のヘッダ内だけの話かもしれない)

 この説明で、ブラウザのキャッシュが異なる理由がわかりますでしょうか。処理が違うと言うことと、どういうときにどっちを使うかを考えた上で、質問をし直してください。

[ メッセージ編集済み 編集者: Jitta 編集日時 2007-03-14 11:32 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-03-14 12:37
キャッシュを表示したくないというのは多く聞きますが、逆にキャッシュを表示したいとは珍しい事例ですね。
何故そうしたいのかが明確でないので何とも言えませんが、クライアントのキャッシュに依存した設計にしないのが大概において吉です。
クライアントにキャッシュを残す残さないの指示をページ内で行う事ができますが、はっぱをかける程度と認識しておいた方がよいでしょう。キャッシュするかどうかはクライアントの自由だからです。
引用:

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 の場合は、4.5.での戻るボタン、進むボタンはサーバへアクセスしてますよね?
_________________
囚人のジレンマな日々
おちゃねこ
会議室デビュー日: 2007/03/12
投稿数: 3
投稿日時: 2007-03-14 15:29
Jittaさま、囚人さま
ご返信ありがとうございます。

引用:

 Transfer は、サーバ内で処理を行います。現在のページの処理を打ち切り、遷移先のページの処理を呼び出します。従って、クライアントは、遷移したことを知りません。

 Redirect は、クライアントの処理をさせます。現在のページを打ち切り、リダイレクトする HTML を送り返します。クライアントが遷移先のページを要求する処理を、サーバに対して行います。
(HTTP のヘッダ内だけの話かもしれない)

 この説明で、ブラウザのキャッシュが異なる理由がわかりますでしょうか。処理が違うと言うことと、どういうときにどっちを使うかを考えた上で、質問をし直してください。



処理の違いにつきましては理解していたつもりですが、Transferを使用したときのブラウザキャッシュがよく理解できません。(キャッシュされないのでしょうか?)


引用:

Redirect の場合は、4.5.での戻るボタン、進むボタンはサーバへアクセスしてますよね?



いえ、Redirectの場合でもサーバへはアクセスしていないようです。
LANケーブルを抜いて試してみましたが、ブラウザキャッシュが表示されます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-03-14 15:37
引用:

おちゃねこさんの書き込み (2007-03-14 15:29) より:

処理の違いにつきましては理解していたつもりですが、Transferを使用したときのブラウザキャッシュがよく理解できません。(キャッシュされないのでしょうか?)


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/12
投稿数: 3
投稿日時: 2007-03-14 16:28
引用:

 Tranfer したときには、b.aspx が表示されていますが、クライアントは a.aspx を表示しているつもりなんです。なので、キャッシュ云々の話じゃないです。

 Reddirect と Transfer で、ブラウザに表示されるアドレスを、よく見てください。



ご回答頂き大変恐縮なのですが、Transferの場合にブラウザのURLが変更されないのは認識しております。
自分が理解できていない点としまして、Transferしたときにb.aspxが表示され、その画面からブラウザの戻るボタンで戻った画面で表示されている内容は何か?ということになります。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-14 17:56
引用:
自分が理解できていない点としまして、Transferしたときにb.aspxが表示され、その画面からブラウザの戻るボタンで戻った画面で表示されている内容は何か?ということになります。

最初に画面Aを表示した時にできたキャッシュじゃないですか?

引用:
Redirectで遷移した場合でも、画面BのLabelに「TESTA」と表示させる方法を模索しており、
DateTimeをクエリ文字列に付加し、Redirectを行った場合は画面Bで「TESTA」と表示されることを確認しております。
ただ、不要なクエリ文字列を付加せずに他に方法は無いものでしょうか?

この仕様を満たす手段として、この解決策は妥当だと思いますよ。

そもそも、同じURLにアクセスしてるのにブラウザはどうやってキャッシュを分ければいいのでしょう。
ブラウザがウインドウごとにキャッシュをもつ仕様にでも変わってくれるしかありません。

いやでもtransferの場合は同じURLなのに、、、と思うかもしれません。
でもpostしているデータが違います。(redirectの場合、画面Bはgetで作られたページです)

ためしに、同じデータをpostするようにしてみてください。区別するために、ラベルには
[セッションデータ+現時刻]でも表示するようにして。少なくとも私の環境では、
transferした場合でも、ブラウザAで「ブラウザBで作られたキャッシュ」を見るようになる
ことが確認できました。
1

スキルアップ/キャリアアップ(JOB@IT)