ASP ページのスクリプトが処理されると、ASP のデリミタまたは <SCRIPT> タグで囲まれていないテキストまたはグラフィックスは、そのままブラウザに返されます。Response オブジェクトを使用して、ブラウザに明示的にコンテンツを送信することもできます。
ASP のデリミタの中から、またはプロシージャからブラウザにコンテンツを送信するには、Response オブジェクトの Write メソッドを使用します。たとえば、次のステートメントは、以前にページを利用したことがあるかどうかに応じて、異なるメッセージをユーザーに送信します。
<% If blnFirstTime Then Response.Write "<H3 ALIGN=CENTER>Welcome to the Overview Page.</H3>" Else Response.Write "<H3 ALIGN=CENTER>Welcome Back to the Overview Page.</H3>" End If %>
プロシージャの外では、ユーザーにコンテンツを送信するために Response.Write を使用する必要はありません。スクリプトのデリミタで囲まれていないコンテンツはそのままブラウザに送信され、適切に書式が設定されて表示されます。たとえば、次のスクリプトの表示結果は前のスクリプトと同じになります。
<H3 ALIGN=CENTER> <% If blnFirstTime Then %> Welcome to the Overview Page. <% Else %> Welcome Back to the Overview Page. <% End If %> </H3>
出力を一度だけ送信すればよい場合や、既存の HTML テキストにステートメントを追加する方が簡単な場合は、スクリプト コマンドと HTML を混在させて記述することができます。デリミタでステートメントを分割しない場合、またはブラウザに返す文字列を作成する場合は、Response.Write を使用します。たとえば、次のように記述すると、HTML フォームから送信された値を表に入れて表示することができます。
Response.Write "<TR><TD>" & Request.Form("FirstName") _ & "</TD><TD>" & Request.Form("LastName") & "</TD></TR>"
Request.Form は、HTML フォームから送信された値を返します (「ユーザーからの入力を処理する」を参照してください)。
注 アンパサンド (&) は、VBScript で文字列を連結するための文字です。アンダスコア (_) は、VBScript で行を続けるための文字です。
Web サーバーは、ブラウザにファイルを返すときに、ファイルに含まれているコンテンツの種類をブラウザに知らせます。ブラウザはこの情報に基づいて、ファイルをそのまま表示できるかどうか、またはほかのアプリケーションを呼び出す必要があるかどうかを判断します。たとえば、Web サーバーが Microsoft Excel のワークシートを返す場合、ブラウザではページを表示するのに Microsoft Excel を起動する必要があります。Web サーバーは、ファイル名拡張子を "MIME" (Multipurpose Internet Mail Extensions) のタイプの一覧にマップすることによりファイル タイプを認識します。たとえば、Microsoft Excel を起動するには、ブラウザは application/vnd.ms-excel MIME タイプを認識する必要があります。
Response オブジェクトの ContentType プロパティを使用して、ユーザーに送信するコンテンツの HTTP コンテンツ タイプ文字列を設定できます。たとえば、次のコマンドはチャンネル定義のためのコンテンツ タイプを設定します。
<% Response.ContentType = "application/x-cdf" %>
チャンネルの詳細については、このトピックの「動的なチャンネルを作成する」を参照してください。
このほかによく使われるコンテンツ タイプとして、text/plain (解読の必要な HTML ステートメントではなく、テキストとして返されるコンテンツ)、image/gif (GIF イメージ)、image/jpeg (JPEG イメージ)、video/quicktime (Apple QuickTime® 形式の映画)、および text/xml (XML ドキュメント) があります。また、Web サーバーや Web ブラウザでは、独自の MIME タイプをサポートすることができます。Microsoft Web サーバーで既に定義されているコンテンツ タイプを表示するには、インターネット インフォメーション サービス スナップイン で、 Web サイトのプロパティ シートを開き、[HTTP ヘッダー] タブをクリックして、[ファイルの種類] をクリックします。これらのファイル タイプは、ASP を使って手動でコンテンツ タイプを設定するときに、参照として使用できます。
ユーザーにコンテンツを送信する代わりに、Redirect メソッドを使って別の URL にブラウザをリダイレクトすることもできます。たとえば、ユーザーが顧客 ID を受けとったかどうか確認することができます。 受けとっていない場合は、ホームページから受けとるようにユーザーをホームページにリダイレクトできます。
<% If Session("CustomerID") = "" Then Response.Redirect "Register.asp" End If %>
ユーザーにコンテンツが送信される前に処理されるサーバー側スクリプトは、"バッファ処理される" と言います。ASP により、バッファ処理をオンまたはオフにすることができます。 また、この構成により、Redirect メソッドの動作に大きな影響が出ます。特に、バッファ処理をオフにした場合、ページの HTTP ヘッダーがブラウザに返される前に、ブラウザをリダイレクトする必要があります。
Response.Redirect ステートメントはテキストまたは <HTML> タグよりも前の、ページの先頭に記述し、その前にブラウザには何も送信されないようにしてください。コンテンツやヘッダーがブラウザに返された後で Response.Redirect を使用すると、エラー メッセージが表示されます。また、Response.Redirect の後に Response.End を続ける必要が "ない" 点に注意してください。
ページ内部で Response.Redirect を使用する場合は、「コンテンツのバッファ処理を行う」で説明するように、Response.Buffer プロパティと共に使用してください。
Response.Redirect を使ってブラウザをリダイレクトするには、"往復" 処理が必要になります。 つまり、サーバーが新しい URL の場所を示す HTTP 応答をブラウザに送ります。ブラウザは、サーバーの要求キューから自動的に離れて、新しい URL 用の新しい HTTP 要求を送信します。次にサーバーは、この間に届いたほかのクライアントの要求と共に、この新たな要求を要求キューに追加します。ビジーな Web サイトでは、往復処理は帯域幅を浪費し、サーバーのパフォーマンスを低下させます。 ブラウザが同じサーバーに配置されているファイルにリダイレクトされるときは、特に著しく低下します。
Response.Redirect メソッドではなく Server.Transfer メソッドを使って、1 つの .asp ファイルから同じサーバー上の別のファイルに転送することができます。Server.Transfer メソッドを使うと、.asp ファイルに対する要求をサーバーの要求キューを離れずに直接転送できるため、負担の大きい往復処理を回避できます。
たとえば、次のスクリプトは、Server.Transfer を使い、その状態の情報に応じてアプリケーションのページ間をジャンプする方法を示します。
<% If Session("blnSaleCompleted") Then Server.Transfer("/Order/ThankYou.asp") Else Server.Transfer("/Order/MoreInfo.asp") End if %>
Server.Transfer は、1 つの実行 .asp ファイルから別のファイルに要求を送信します。転送中、初めに要求された .asp ファイルは、出力バッファをクリアせずに直ちに実行を終了します (詳細については、「コンテンツのバッファ処理を行う」を参照してください)。送信先ファイルが実行を開始すると、要求情報がこのファイルで使用可能になります。実行中、送信先ファイルは初めに要求されたファイルと同じ組み込みオブジェクトのセット (Request、Response、Server、Session、および Application) にアクセスできます。
Server.Transfer を使って、異なるアプリケーションに配置された .asp ファイル間での転送もできます。ただし、別のアプリケーションの .asp ファイルに転送するときは、ファイルは転送元のアプリケーションの一部であるかのように動作します。 つまり、ファイルは実際にファイルが置かれているアプリケーションではなく、転送元のアプリケーションに規定されている範囲の変数のみにアクセスできます。たとえば、販売アプリケーションのファイルから人事アプリケーションのファイルに転送した場合、販売アプリケーションはこのファイルを人事アプリケーションから必要に応じて借り、それが販売アプリケーションの一部であるかのように実行します。
ASP には、ファイルに転送し、コンテンツを実行して、転送を開始したファイルに戻す Server.Execute コマンドもあります。VBScript を使い慣れている場合は、Server.Execute がプロシージャ呼び出しに類似したものであり、プロシージャを実行する代わりに .asp ファイル全体を実行すると考えると理解できます。
たとえば、次のスクリプトは Server.Execute を使って .asp ファイルを動的に取り込む方法を示します。
<% . . . If blnUseDHTML Then Server.Execute("DHTML.asp") Else Server.Execute("HTML.asp") End If . . . %>
転送先ファイルが同じサーバー上のアプリケーションに属している限り、転送元のアプリケーションはこの転送先ファイルに転送し、転送先ファイルのコンテンツを実行してから、転送を開始したファイルの実行を再開します。Server.Transfer の場合と同じように、実行される .asp ファイルは元のアプリケーションの一部であるかのように動作します。ただし、Server.Execute は異なるサーバー間では実行 "されません"。詳細については、「Server.Execute」を参照してください。
既定では、Web サーバーはページ上のすべてのスクリプト コマンドを処理してから、ユーザーにコンテンツを送信します。この処理は、"バッファ処理" と言います。バッファ処理が無効になるように Response オブジェクトの Buffer プロパティを設定し、Web サーバーがページを処理しながら HTML とスクリプトの結果を返すようにすることもできます。
.asp ファイルをバッファ処理する利点は、たとえば、スクリプト処理が正しく実行されない場合、またはユーザーが適切なセキュリティ資格情報を持っていない場合に、Web ページの送信を中止できることです。送信を中止する代わりに、Server.Transfer を使って別のページにユーザーを送るか、または Response オブジェクトの Clear メソッドを使ってバッファをクリアして、別のコンテンツをユーザーに送信することができます。アプリケーションによっては、転送の前に Clear メソッドを使う場合もあります。次の例では、この両方のメソッドが使用されます。
<HTML> <BODY> . . . <% If Request("CustomerStatus") = "" Then Response.Clear Server.Transfer("/CustomerInfo/Register.asp") Else Response.Write "Welcome back " & Request("FirstName") & "!" . . . End If %> </BODY> </HTML>
Response.Buffer は、Web サーバーが HTTP ヘッダーを返す前に、スクリプトでヘッダーを修正できるようにする場合にも使用できます。HTTP ヘッダーを修正するプロパティおよびメソッドには、Response.Expires、Response.Redirect などがあります。
同じスクリプトの中で Buffer プロパティが TRUE に設定され、バッファ処理されたコンテンツを直ちにブラウザに送信する Flush メソッドを呼び出さない場合、サーバーはクライアントからのキープアライブ要求を保持します。この方法でスクリプトを記述すると、(サーバーとクライアント、およびその間のプロキシ サーバーのいずれもがキープアライブ要求をサポートしている場合は) クライアントの要求ごとにサーバーが新しい接続を作成する必要がなくなるため、サーバーのパフォーマンスが向上するという利点があります。ただし、この方法を使用した場合はバッファ処理が行われるため、サーバーがスクリプト全体の処理を終えるまで、応答がユーザーに送信されないという欠点もあります。このため、長いスクリプトや複雑なスクリプトでは、ページが表示されるまでユーザーが長時間待たされる可能性があります。
既定では、ASP アプリケーションではバッファ処理は有効になっています。インターネット インフォメーション サービス スナップインで、 ASP アプリケーション全体のバッファ処理を無効にすることができます。詳細については、「ASP アプリケーションを構成する」を参照してください。
アプリケーションがクライアントに送信するページは、"プロキシ サーバー" を経由することがあります。プロキシ サーバーは、クライアント ブラウザに代わって Web サイトのページを要求します。プロキシ サーバーは HTML ページをキャッシュしているので、同じページが繰り返し要求される場合にすばやく効率的にページをブラウザに返すことができます。プロキシ サーバーを使って要求の処理とページのキャッシュを行うと、ネットワークと Web サーバーの負荷を軽減できます。
キャシュは多くの HTML ページに対して十分に機能しますが、頻繁に更新される情報を含む ASP ページでは適切に機能しないことがあります。たとえば、株価を表示したり、大規模ビジネスでの在庫を表示したりするページでは、適切なタイミングで情報を提供する必要があり、わずか 1 時間前の情報でも正確さを欠くことがあります。また、カスタム ホーム ページなど、ユーザーごとにカスタマイズした情報を返すアプリケーションの場合は、ユーザーの個人情報がほかのユーザーに表示されないようにする必要があります。
ASP では、既定では、ASP ページ自体はキャッシュしないようにプロキシ サーバーに指示します (画像、イメージ マップ、アプレット、およびそのページから参照されているその他の項目はキャッシュされます)。Response.CacheControl プロパティを使用して Cache-Control HTTP ヘッダー フィールドを設定すると、特定のページに対してキャッシュを有効にすることができます。Response.CacheControl の既定値は文字列 "Private" であり、プロキシ サーバーによるページのキャッシュは無効になっています。キャッシュを有効にするには、Cache-Control ヘッダー フィールドを Public に設定します。
<% Response.CacheControl = "Public" %>
HTTP ヘッダーは、ページのコンテンツが送信される前にブラウザまたはプロキシ サーバーに送信する必要があるため、Response.CacheControl プロパティはどの HTML タグよりも前に記述するか、またはバッファ処理を無効にしている場合は、Response.Buffer を使用してページをバッファ処理してください。
Cache-Control ヘッダー フィールドは、HTTP 1.1 仕様の一部です。HTTP 1.0 のみをサポートするプロキシ サーバー上では、Expires ヘッダー フィールドが送信されないので、ASP ページはキャッシュされません。
ページをキャッシュするかどうかの決定については、ブラウザの種類ごとに規則があります。ブラウザによる ASP ページのキャッシュを禁止するには、次の例のように、Response.Expires を使用して Expires ヘッダーを設定してください。
<% Response.Expires = 0 %>
値 0 は、キャッシュされたページの有効期限が直ちに切れることを示します。HTTP ヘッダーは、ページのコンテンツが送信される前にブラウザに送信する必要があるため、Response.Expires プロパティをどの HTML タグよりも前に記述するか、またはページをバッファ処理してください。
"チャンネル" は、Microsoft Internet Explorer 4.0 以降で使用できる Web テクノロジです。 チャンネルを使うと、新しい Web コンテンツまたは更新された Web コンテンツを自動的にユーザーに配布できます。チャンネルは、ユーザーのコンピュータが定期的にサーバーに接続し、更新された情報を取り出すようにスケジュールします。この検索プロセスは、一般に "クライアント プル" と呼ばれます。 これは、サーバーから情報を "引き出す"、つまり集めるためです。特定の Web サイトで新しい情報が入手可能になると、コンテンツがブラウザのキャッシュにダウンロードされます。Web ベースの情報を配布するために、特にイントラネット上でチャンネルを有効に使用すると、情報の中央集中化とサーバー トラフィックの削減に効果的です。チャンネルの詳細については、Microsoft Internet Explorer の Web サイト を参照してください。
ASP では、"チャンネル定義ファイル" を生成することにより動的にチャンネルを作成するスクリプトを記述することができます。XML ベースのチャンネル定義ファイル (.cdf) は、チャンネルのコンテンツの構成および更新スケジュールを記述します。.cdf ファイルのコマンドは HTML タグに類似した構文を使用するので覚えやすく、スクリプトから簡単に生成できます。サーバー側スクリプトでチャンネル定義ファイルを作成するときは、ファイルの拡張子を .cdx にします。ASP は、.cdx 拡張子のファイルを読み込むと、自動的に application/x-cdf コンテンツ タイプを送信し、ブラウザにチャンネル定義としてバイトを解釈するように指示します。.cdx 拡張子を使わない場合は、スクリプトの記述で Response.ContentType を使用して、手動でコンテンツ タイプを application/x-cdf に設定する必要があります。
次に示すのは、チャンネルの使い方の例です。この HTML フォームは、チャンネルの選択をユーザーに求めます。ユーザーから送信されたフォームは、.cdx ファイル内のスクリプトを呼び出し、チャンネル定義を作成します。
<P> Choose the channels you want. </P> <FORM METHOD="POST" ACTION="Chan.cdx"> <P><INPUT TYPE=CHECKBOX NAME=Movies> Movies <P><INPUT TYPE=CHECKBOX NAME=Sports> Sports <P><INPUT TYPE="SUBMIT" VALUE="SUBMIT"> </FORM>
Chan.cdx 内のスクリプトは、要求と共にユーザーから送信されたフォームの値に基づいて、チャンネル定義を作成します。
<% If Request.Form("Movies") <> "" Then %> <CHANNEL> channel definition statements for the movie pages </CHANNEL> <% End If %> <% If Request.Form("Sports") <> "" Then %> <CHANNEL> channel definition statements for the sports pages </CHANNEL> <% End If %>
Distributed Authoring and Versioning (WebDAV) は、HTTP 1.1 プロトコルの強力な拡張機能であり、Web コンテンツを、ローカル ファイル システムのようなファイル記憶媒体として HTTP 接続上で公開します。WebDAV により、Web がシームレスで共同作業に適したオーサリング環境になることが大いに期待できます。WebDAV を実装した IIS 5.1 では、リモートにいる作成者が Web サーバー上のファイルとディレクトリに対して、属性の作成、削除、移動、検索、または適用を実行できるようになります。詳細については、「WebDav の発行」を参照してください。