ASP がページ要求に応じてクライアントに送信される HTTP ヘッダーをどのように作成または変更するかをいくつかの場所で見てきました。 Response オブジェクトには、これを行うのに役立ついくつかのプロパティとメソッドがあります。以下にいくつかのヘッダー メソッドを示します。
· キャッシュと有効期限を制御します。
· ステータスとカスタマイズされた HTTP ヘッダーを作成します。
· MIME タイプまたはコンテンツ タイプを指定します。
・PICSタグを追加します。
次に、これらの各側面について簡単に説明します。 「応答オブジェクト」ホーム ページ (show_response.asp) で関連するプロパティ名またはメソッド名をクリックすると、説明しているプロパティとメソッドを確認できます。
1. ASP Web ページのキャッシュと「期限切れ」
ユーザーのブラウザ、およびユーザーとサーバー間のプロキシ サーバーは、ASP で作成された HTML および Web ページをキャッシュできます。その後ユーザーがページをリクエストすると、ブラウザは (キャッシュされたバージョンの日付を含む HTTP_IF_MODIFIED_SINCE ヘッダーを使用して) 「最終変更」リクエストをサーバーに送信し、ページが変更されたかどうかを尋ねます。
変更されていない場合、サーバーはステータス コードと「304 Not Modified」というメッセージで応答する必要があり、ブラウザはネットワーク経由でコピーをダウンロードせずに、キャッシュされたコンテンツを使用します。変更されたバージョンがすでに存在する場合は、「200 OK」ステータス コードとメッセージとともに送信されます。
1) Response.CacheContol 属性
他の要因もこの処理プロセスに影響します。ただし、Web ページで使用されるネットワーク ルート内のプロキシ サーバー (通常はクライアント側にあります) は、Response.CacheControl プロパティを Private に設定することで Web ページのキャッシュを停止できます。 ASP 3.0 では、これが ASP Web ページのデフォルトであるため、設定する必要はありません。ただし、Web ページが個々の訪問者向けに特別にカスタマイズされている場合に特に便利です。これにより、同じネットワーク上の他のユーザーが同じページにアクセスできなくなります。 CacheControl 属性値が Public に設定されている場合、サーバーは Web ページをキャッシュできます。一部のプロキシ サーバーは動作が異なり、このヘッダーを無視またはバイパスする場合があることに注意してください。
IE4 では、プロキシ サーバーのキャッシュが使用可能な場合に、偽の「このページの有効期限が切れています」というメッセージが表示される可能性があります。この属性の影響を確認するために、独自のプロキシ サーバーを介してネットワーク上でテストできる Web ページ (expiretest_form.asp) が提供されています。このページは、「Response Object」ホームページの「Response.CacheControl」リンクをクリックすると表示されます。次の図に示すように、
このページがexpiretest_result.asp Webページに送信されると、Response.CacheControlプロパティを設定でき、スクリプトが実行される値と時刻がWebページに挿入されます:
<%
Request.Form(“public”) = “on”の場合、「キャッシュ制御」チェックボックスがオンになっています
Response.CacheControl = "パブリック"
それ以外
Response.CacheControl = "プライベート"
終了の場合
%>
<HTML>
...
キャッシュ制御は: <B><% = Response.CacheControl %></B><P>
テキスト ボックスの値: <B><% Response.Write Request.Form(“textbox”) %>
<%
Response.Write Right(“0” & 時(現在),2) & “:” & Right(“0” & 分(現在),_
& 2) & “:” & Right(“0” & 秒(現在),2)
%></B>
ブラウザで [戻る] または [進む] をクリックすると、コードが自動的に実行されるか、キャッシュされたコピーを使用するかを確認できます。
2) Response.Expires プロパティと Response.ExpiresAbsolute プロパティ
キャッシュされた Web ページの保存時間を制御する 2 つのプロパティは、Response オブジェクトの Expires プロパティと ExpriesAbsolute プロパティです。 Response.Expires は、ページが作成されてからキャッシュから破棄されるまでの有効期間を分単位で定義します。 ExpiresAbsolute 属性は、有効期限の絶対日時を設定します。
これらの属性の使用方法を示すために、addheaders_form.asp という名前のサンプル Web ページが提供されています。応答オブジェクトのホームページで両方のプロパティのリンクをクリックします。
表示されるページでは、独自にカスタマイズした HTTP ヘッダーを追加し、応答に影響を与える HTTP ヘッダーのさまざまな属性を設定できます。 [クエリ コンテンツの送信] ボタンをクリックすると、show_headers.asp ページは、選択されたヘッダーを返されたデータ ストリームに追加し、これを実行するために使用されたコードを表示し、対応する実行時間を表示します。これは、ページがクエリ コンテンツかどうかを確認するために使用できます。 was キャッシュは引き続き再度実行されます。
show_headers.asp Web ページのコードは、HTTP ヘッダーを作成および追加します。手順は次のとおりです。
<%
'他の出力の前に HTTP ヘッダーを書き込みます
If Request.Form(“期限切れ”) = “オン” then _
Response.Expires = Request.Form("expires_value")
Request.Form(“expiresabs”) = “on” の場合 _
Response.ExpiresAbsolute = Request.Form("expiresabs_value")
Request.Form("lastmod") = "on" の場合 _
Response.AddHeader “LAST-MODIFIED”, Cstr(Request.Form(“lastmod_value”))
If Request.Form(“pragma”) = “on” then _
Response.AddHeader “PRAGMA”, CStr(Request.Form(“pragma_value”))
Request.Form("リフレッシュ") = "オン" の場合、_
Response.AddHeader “REFRESH”, CStr(Request.Form(“refresh_value”))
If Request.Form(“addheader”) = “on” And Len(Request.Form(“addheader_name”)) then _
Response.AddHeader CStr(Request.Form(“addheader_name”)), _
CStr(Request.Form(“addheader_value”))
Request.Form("ステータス") = "オン" の場合 _
Response.Status = Request.Form("status_value")
%>
<HTML>
...
...コードと実行時間を表示
...
残りは、実行されたコードと実行日時を示すだけです。読者は、Web ページにカスタム ヘッダー「PRAGMA」が含まれていることに気づくでしょう (これについてはこれまで説明しませんでした)。一部の (以前の) プロキシ サーバーは、これを Web ディスクをキャッシュする必要があるかどうかの指標として使用します。デフォルトでは、HTTP ヘッダー「PRAGMA=NO-CACHE」を受信しない限り、ページはキャッシュされます。
2. ステータス コードとカスタマイズした HTTP ヘッダーを作成する
Web ページの例で前に示した Response オブジェクトの AddHeader メソッドを使用して、独自のステータス コードやカスタマイズしたヘッダーを作成できます。このメソッドには 2 つのパラメータが必要です。HTTP ヘッダー名、その値を含む文字列、またはその値に割り当てられた値です。例として、次のコードはページに REFRESH ヘッダーを追加します。
Response.AddHeader "REFRESH", "60;URL=newpath/newpage.asp"
これは、クライアント側の <META> 要素と同等です。
<META HTTP- EQUIV=" REFRESH", "60;URL=newpath/newpage.asp">
つまり、Status 属性を指定して AddHeader メソッドを使用して、ブラウザに新しいページを読み込ませることもできます。
Response.Status = "302 Object Moved 」
Response.Addheader “Location”、“newpath/newpage.asp”
これは、Response.Redirect メソッドを使用するのと同じです。
Response.Redirect “newpath/newpage.asp”
Response.Status プロパティを使用して、必要なステータス メッセージを送信できます。たとえば、次の行を追加します。
Response.Status= “401 Unauthorized”
Response.Addheader “WWW-Authenticate”, “BASIC”
ブラウザにユーザー名とパスワードのダイアログを強制的に表示し、BASIC 認証を使用してサーバーに送り返します。この記事で説明します。このシリーズの後半で確認方法を参照してください)。
3. MIME タイプとコンテンツ タイプ
動的に作成された文字列をブラウザに送信する場合、ブラウザに提供するときにコンテンツ タイプを直接示すのではなく、ディスク ファイルであるかどうかを示す拡張子を提供します。 ContentType は非常に便利です。特に指定がない限り、ASP によって作成されるすべての Web ページはデフォルトで「text/type」になります。コンテンツ タイプの識別子は MIME タイプです (MIME は Multi-Purpose Internet Multimedia Extension または Multi-pupose Internet Mail Extension の略で、通常はコンテキストに応じて異なります)。
たとえば、クライアントに送信されるデータ アノテーションがデータベースからバイナリ値を読み取って作成された画像である場合、コンテンツを送信する前に適切な CONTENT-TYPE ヘッダーを追加する必要があります。
Response.ContentType = "image/jpeg"
Ifデータベースからイメージを作成します。XML ファイルの場合は、MIEM タイプ「text/xml」を使用します。ファイル エディタで表示したり、クライアントにディスク ファイルとして保存できるテキスト ファイルを作成する場合は、「text」を使用します。 /文章"。
4. PICS タグの追加
Respnse.Pics プロパティは、通常の <META> タグと同じ方法で PICS (Platform for Internet Content system) タグをページに追加するだけです:
QUOT = Chr(34)
StrPicsLabel = “(PICS-1.0” & QUOT & “http://www.rsac.org/ratedsv01.html”_)
"&「1世代の本音コメント」"_
& 「RSACi 北米サーバー」 & QUOT & " for " & QUOT _
& “http://yoursite.com” & QUOT & “ on” & QUOT _
& “1999.08.01T03:04-0500” & QUOT & “r (n 0 s 0 v 2 l 3))”
Response.Pics(strPicsLabel)
このコードは、次の PICS ラベルを追加します:
(PICS-1.0 “http://www.rsac.org/ratedsv01.html” 1 gen true comment “RSACi
「北米サーバー」、「http://yoursite.com」、「1999.08.01T03:04-0500」
r (n 0 s 0 v 2 l 3))
PICS に関する詳細情報、またはページ コンテンツの定義方法の詳細については、 http://www.rsac.org/サイトを検索してください。
インターネット サービス マネージャーでのヘッダーの定義
この一連の記事の最初の部分では、インターネット サービス管理 (MMC プラグイン) アプリケーションで各 Web サイトと IIS 5.0 ディレクトリのプロパティを設定する方法について説明しました。このサイトまたはディレクトリ リソースのすべてのリクエストの HTTP ヘッダーでクライアントに送信され、各 Web ページで ASP スクリプト コードを使用してこれらのプロパティを設定する代替手段が提供されます。
Web サイトまたはディレクトリを右クリックし、ダイアログ ボックスの [HTTP ヘッダー] タブで、ページ コンテンツの有効期間の相対時間または絶対日付を設定し、カスタマイズされたヘッダーを定義できます。 PICS コンテンツ レベル ラベルを作成します。MIME タイプ マッピングを通じてコンテンツ タイプを定義することもできます。
カスタム REFRESH HTTP ヘッダーが作成され、このディレクトリからロードされたすべての Web ページに適用されていることがわかります。つまり、1 分ごとに自動的にリロード (更新) されます (野球の試合の最新スコアを表示するには理想的ですが、サーバーへの負荷が大きすぎます)。
[MIME マップ] ボックスにカスタム コンテンツ タイプ マッピングを追加するには、メインの [プロパティ] ダイアログ ボックスで [ファイル タイプ] ボタンをクリックしてリストに追加します。
HTTP ヘッダーの実験を開始すると、すべてのブラウザーが同じように動作するわけではなく、多くのブラウザーが異なる HTTP ヘッダーに異なる方法で応答するため、一般に適用可能な原則を確実に確立することが場合によっては非常に困難であることがすぐにわかります。
2. クライアント証明書を使用する
安全な Web サイト、またはコンテンツの安全な部分を含むサイトを設定する場合は、デジタル サーバー証明書をインストールして、訪問者が証明書内の暗号化された詳細を使用できるようにすることでサーバーを認証できます。サイトまたはディレクトリへの各ページ リクエストで、サーバーは証明書のコピーを送信します。ブラウザはそれを調べて、通信相手を特定します。
同様に、ユーザーが Web サイトにアクセスするときに有効なデジタル証明書の提供を要求するようにサーバーを設定することもできます。この証明書は、Verisign ( http://www.verisign.com ) や Thawte Consulting ( http://www.thawte.com ) など、多くのソースから取得できます。このプロセスの詳細については、第 25 章で説明します。
これらの状況はすべて、Request オブジェクトの ClientCertificate コレクションの値を使用します。この章のコード例には、ユーザーがこれらのコレクション値のメソッドの一部を使用する方法を示すページが含まれています。
このページは showcert.asp という名前で、ClientCertificate コレクションを反復処理し、そこに含まれるすべての値を表示するだけです。これは、これまで常に使用してきたのと同じ単純なコードを使用して実行できます。唯一の違いは、結果を保持する HTML テーブルを構築し、結果を 60 文字のグループに切り詰めることです。
<TABEL CELLPADDING=0 CELLSPACING=0>
<%
Request.ClientCertificate() の各 keyItem について
StrItemValue = Request.ClientCertificate(keyItem)
Len(strItemValue) > 90 の場合、strItemValue = Left(strItemValue, 60) & “...etc.”
Response.Write “<TR><TD>” & keyItem & “ = “ & strItemValue & “</TD></TR>”
次
%>
</TABLE>
クライアント証明書リダイレクトの使用
サイトまたはサイトの一部へのすべての訪問者がクライアント証明書の提供を求められると、そこに含まれる情報を使用して、そのユーザー向けに作成する Web ページを作成できます。たとえば、証明書の組織エントリを使用して、サイトの特定の部分に自動的にリダイレクトし、他の訪問者を別の場所にリダイレクトできます。
If Request.ClientCertificate("SubjectO") = "Wrox Press Inc" then
Response.Redirect "/wrox_staff/default.asp" 'Wrox スタッフ サイト
それ以外
Response.Redirect "/public/Default.asp" '通常の公開サイト
End If
したがって、 Country エントリを使用して、訪問者を対応する Web サイトにリダイレクトできます。
Select Case Request.ClientCertificate("SubjectC")
ケース「英国」: Response.Redirect 「http://uk_site.co.uk/」
ケース「DE」: Response.Redirect 「http://de_site.co.de/」
ケース「FR」:レスポンス.リダイレクト「http://fr_site.co.fr/」
'... など。
それ以外の場合: Response.Redirect "http://us_site.com/"
End Select
3. バイナリ データの読み取りと書き込み
ブラウザからサーバーに送信される HTTP データ ストリームと、サーバーからブラウザに返されるデータ ストリームへのバイナリ データ アクセスを提供する方法は 2 つあります。 Request.BinaryRead メソッドは、読み取るバイト数を指定するパラメーターを取得し、要求された POST セグメント (ASP の Form コレクション内のデータなど) から取得したバイトを含むバリアント型の配列を返します。次のプログラムは、データの最初の 64 バイトを読み取ります。
varContent = Request.BinaryRead(64)
BinaryRead メソッドを使用すると、今後 ASP の Request.Form コレクションにアクセスできなくなります。同様に、何らかの方法で Request.Form コレクションを参照すると、BinaryRead メソッドは使用できなくなります。
BinaryWrite メソッドを使用して、ASP によって作成された応答ストリームにバイナリ データを書き込むこともできます。クライアントに書き込むバイトのバリアント配列を指定する必要があります。
Response.BinaryWrite(varContent)
これらのメソッドは、データベースから HTML 以外のソースを作成しない限り、ほとんど使用されません。使用例としては、画像を構成するバイトをデータベースから読み取り、BinaryWrite メソッドを使用してクライアントに送信します。
4. カスタム ログ メッセージの作成
W3C 拡張ログ ファイル形式でテキスト ファイルにリクエストを記録するようにサーバーが設定されている場合は、Response.AppendToLog メソッドを使用して、ログ ファイル エントリの末尾にメッセージ文字列を追加できます。このメソッドは、特定の Web ページの値やメッセージを保存したい場合、またはスクリプトで特定の状況が発生した場合に非常に便利です。
たとえば、イントラネットの「定常注文」アプリケーションを使用して、特定のエントリ数を超えた従業員の部門番号を記録できます
。
intItemCount > 25 の場合
Response.AppendToLog "「」& strDept & 部門からの大量注文。"
終了の場合
...
拡張ログの設定
AppendToLog メソッドを使用するには、W3C 拡張ログ ファイル形式のログ設定を有効にする必要があります。設定方法は、次の図に示すように、[プロパティ] ダイアログ ボックスの [Web サイト] タブに入り、[ログを有効にする] チェック ボックスを選択し、[W3C 拡張ログ ファイル形式] を選択して、[プロパティ] ボタンをクリックします
。と表示されたら、ログ ファイルに含めるエントリを選択できます。 URI Stem がチェックされていることを確認してください。チェックされていない場合、AppendToLog メソッドは失敗します。
ログ ファイルにエントリを書き込もうとする簡単なサンプル ページが用意されています。このページは、リクエスト オブジェクトのホーム ページ (show_request.asp) の AppendToLog メソッド リンクから開くことができます。このページで行うことは、現在の日付と時刻を含む単純な文字列を作成し、AppendToLog メソッドを実行することだけです:
strToAppend = “ページが実行されました ” & Now
Response.AppendToLog strToAppend
概要
この記事では、ASP 3.0 の研究を開始しました。また、ASP 3.0 が Internet Information Server 5.0 と連携して、動的 Web ページおよび Web アプリケーションを作成する使いやすく効率的な方法を提供する方法についても説明しました。 。もちろん、まだ勉強する必要がある箇所がいくつかあります。この章では、ASP に組み込まれている 2 つの最も基本的なオブジェクトについて学習しました。
2 つの最も基本的なオブジェクトは、Request オブジェクトと Response オブジェクトです。これらを使用すると、クライアント/サーバー セッションの一部として値にアクセスして使用できます。これは、ユーザーが Web サイトからページまたはリソースを要求して読み込むたびに発生します。つまり、Request オブジェクトはユーザーが要求したすべてのコンテンツへのアクセスを提供し、Response オブジェクトはサーバーから返される応答の作成と変更を可能にします。
これらのオブジェクトは、コレクションとプロパティを通じてセッションのさまざまな部分を公開し、個々のセグメントを取得および変更するための複数のメソッドを提供します。これらをユーザーのリクエストを分解し、適切なコンテンツを含むレスポンスを作成するためのツールと考えると、何が起こっているのかを理解するのに役立ちます。また、さまざまなメソッドがクライアント、サーバー、作成中の Web ページにどのような影響を与えるかを理解するのにも役立ちます。