HTTPの検証の使用

より良いアプローチは、HTTPの検証モデルを使用しています。このモデルは、チケットのデータを参照する一意の各応答を送信します。場合、クライアントは再びコンテンツをダウンロードしたい場合、クライアントは、サーバーの最後のダウンロードからチケットを送信します。サーバーではそれが持っているチケットの場合、およびサーバーの通知は、チケットを同じですが、送信されたチケットを比較し、それは、HTTP 304の変更は発生していることを示すに送信します。その時点で、クライアントは、キャッシュからは、古いコンテンツを取得することができるようにユーザに提示することは、最新かつ最高。 HTTPの検証モデルでは、HTTPリクエストが必要ですが、それを生成して、もう一度コンテンツを送信するの費用は含まれていません。HTTPの会話の用語では、HTTPの検証モデルとして実装されて次のとおり、この例では、クライアントからの要求を示していますサーバーからの応答。

 リクエスト1のGET / ajax/chap04/cachedpage.html HTTP/1.1の受入:* /受入*言語:ja -受入約エンコーディング:gzipで、ユーザデフレートエージェント:Mozilla/4.0(互換; MSIE 6.0;は、Windows NT 5.1;の。NET CLR 2.0.50215)主催:127.0.0.1:8081接続:Keep - Aliveを 応答1HTTP/1.1の200のOK ETagを:幅/"45〜1123668584000"はLast - Modified:10 -タイプ2005午前10時09分44秒次コンテンツ8月:テキスト/ HTMLコンテンツの長さ:45日付:Wed、10 2005年8月10日水: 11時54分次サーバー:Apache-Coyote/1.1 キャッシュされたコンテンツ
  

クライアントは、ドキュメントのリクエスト/ ajax/chap04/cachedpage.htmlことができます。サーバーは、コンテンツが、応答がないのはCache - ControlやExpiresの識別子です。これは、返されたコンテンツがキャッシュされていないが、それは真実ではないことを示すためだ。サーバーは、ではなく、HTTPの有効期限モデルでは、HTTPの検証モデルを使用して示されている。は、返されるページのキャッシュは、独自のETagの識別子によって識別さの一部となっている。 ETagの識別子と呼ばれる エンティティタグは、一意のハッシュコードをHTMLページを比較することができます。は、エンティティタグ識別子の先頭に付加されている文字Wは、このページには、弱い参照とは、HTTPサーバーはすぐにそのページには、サーバー側の更新を反映していないことを意味します。次のステップは、ブラウザをリフレッシュすると、同じページを要求され再び。 HTTPの会話を次のとおりです。

 リクエスト2のGET / ajax/chap04/cachedpage.html HTTP/1.1の受入:* /受入*言語:ja -受入約エンコーディング:gzipで、収縮がIf - Modified - Sinceを:10 2005午前10時09分44秒次8月水の場合、 None - Matchの:幅/"45-1123668584000"のUser - Agent:Mozilla/4.0(互換; MSIE 6.0;は、Windows NT 5.1;の。NET CLR 2.0.50215)主催:192.168.1.100:8081接続:Keep - Aliveを 応答2HTTP/1.1の304 Not Modifiedと日付:Wed、10 2005午前10時11分58秒次サーバー8月:Apache-Coyote/1.1水

ときに、クライアントとSinceとIf - None - Matchのリクエストで送信され、追加の識別子がIf - Modified - 2番目の要求を行います。通知方法は、以前に送信ETagの値は、If - None - Matchの識別子を参照する識別子です。サーバは、URLのクエリとエンティティタグを生成します。場合は、エンティティタグの値と同じですが送信され、サーバーはその内容を変更していないことを示すために、HTTP 304コードを返すときには、クライアントに送信することができますエンティティタグを使用してIf - MatchかはIf - None - Matchの。もしクライアントがIf - Matchのは、サーバー上のデータの日付のうちは、サーバー、および新しいデータキャッシュミスのエラーではないが返さを送信します。場合は、クライアントが送信する場合、- None - Matchの識別子は、サーバがデータは変更されると、サーバーは、HTTP 304のリターンコードを送信します。場合は、データの期限が切れて、新しいデータが送信されます。

キャッシュのHTTP検証モデルを使用する利点は、いつでも、要求の時点での最新バージョンを取得することが保証されています。クライアントは、選択したリクエスト秒、時間、週間のすべてのカップル、または任意の期間を行うことができます。それをクライアントにするときは、データの新しいコピーを取得することにすることです。確かに、まだいくつかのHTTPトラフィックを要求するためですが、それaminimumに縮小されています。持つすべてのよると、ある状況を例にとって意味のある場合は、HTTPの有効期限モデルを使用している場合、HTML形式のコンテンツは静的であり、変化はほとんど。 HTTPの有効期限モデルでは、1つのリクエストモデル内のキャッシュコントローラからのときに、古くなったエントリを剪定するために使用することができます。

クライアントのキャッシュの有効性はHTTPを使用して実装 1つの要求は、クライアントのキャッシュのHTTPの検証を使用するように拡張することができます。どのようなHTTPの検証モデルの変化が物理的要求は、常に行われるということです。メタデータのナビゲーションの観点からは、この要求は、データが最新であることを確認するためにわずかな遅延の必要性が原因かもしれません。ただし、要求と応答のサイクルはかなり""応答が変更されないでほとんどの場合、結果として速いです。非同期のための2つの必須機能の完全な実装を次のとおりです。

 ソース: /クライアント/スクリプト/ HttpValidationCacheController(/ common.jsヴァール_cache = jaxson:新しいArray()、didNotFindETagError:(ホームページURL)())関数HTTPValProcessAndBreakBeforeRequest(XMLHTTPのリクエスト、設定)関数(場合(request.action ==""のGET )(ヴァールOBJの= HttpValidationCacheController._cache【URL];場合(OBJの!=がnull)( this.xmlhttp.setRequestHeader("およびIf - None - Matchの"obj.ETag); this.xmlhttp.setRequestHeader(は"Pragma"、"のno - cache"); this.xmlhttp.setRequestHeader("はCache - Control"、"のno - cache");))falseを返す;)関数HTTPValProcessAndBreakAfterRequest(XMLHTTPのリクエスト、の設定)(場合(xmlhttp.status == 200&&request.action ==""のGET)(場合(xmlhttp.status == 200)(ヴァールfoundetag =しようxmlhttp.getResponseHeader("ETagの");場合(foundetag!=がnull)(HttpValidationCacheController._cache [URLを[] =( ETagを:foundetag、状況:xmlhttp.status、StatusText:xmlhttp.statusText、はresponseText:xmlhttp.responseText、responseXMLを:xmlhttp.responseXML);)他(HttpValidationCacheController.didNotFindETagError(ホームページURL);))(例外)(HttpValidationCacheController.didNotFindETagError(ホームページURL);))をキャッチ) 他の場合(状態== 304)(ヴァールOBJの= HttpValidationCacheController._cache【URL];場合(OBJの!=がnull)(ヴァールfakeXMLHttp =(ステータス:200、statusText:obj.StatusText、はresponseText:obj.ResponseText、responseXMLを:obj.ResponseXML、)て(settings.onComplete (fakeXMLHttp); trueを返す;)(電子)(globals.errorHandler(電子);))他(("Serverの新たなエラーをスローキャッチは、このデータがキャッシュ内に"と示される);)))falseを返す;)

 

ちょっと考えてコードを調べています。場合は、1つの要求は、クライアントのキャッシュコードに多くの類似点を参照してください。主な違いは、太字で強調表示されている。 HTTPValProcessAndBreakBeforeRequest要求では大きな違いは、HTTPの検証のヘッダーは、以前に実行される要求に対しては、ETagを識別するのに加えています。 HTTPの検証を使用するため、要求を実行することを意味HTTPValProcessAndBreakBeforeRequestすべての状況ではfalseを返す必要があります。

ので、そのロジックをより洗練されHTTPValProcessAndBreakAfterRequest機能をより複雑になります。 HTTPの場合は、検証に使用されているサーバーの場合、サーバーはすべてのリクエストに対して2つのHTTPステータスコード:200と304で応答できるHTTPの検証をサポートします。場合は、ステータスコードが200のいずれかのデータまたは変更されたデータが変更されたことがない。

関係なく、200のステータスコードについては、理由のデータが必要HttpValidationCacheControllerキャッシュインスタンスに追加される。 1つの要求は、クライアントのキャッシュに尊重するとの一つの大きな違いは、ETagの記録の保存を追加。場合は、ステータスコードが304ならば、偽のXMLHttpRequestのインスタンスが作成されているsettings.onCompleteメソッドが呼び出されるように、1つの要求は、クライアントキャッシュの実装に示すように定義とは、RESTの実装、一般からの"建築とは、クライアントの実装のURL何を"の視点を行うには完了です。これは我々はまだURLの詳細、およびサーバーのアーキテクチャをカバーする必要があります。この時点で、私をあなたの記憶をリフレッシュする方法を示しています。データの送信と受信の間の分離は非常に重要である何が可能なクライアントのためになります今日はリクエストをして答えを明日はお問い合わせください。場合は、質問と答えは1つの要求のコンテキストになるし、次に、クライアントは、非常に長い時間を待つのかもしれない。

別のコンテキストでは、この配置するには、リクエストと支援のための行にある店に立っていると支援のための番号を選択するとの違いとして、応答の分離を考えることができます。ショッピングといくつかの特別な木材の断片サイズの買いを想像。各木材のストアには、顧客へのサービスの独自の戦略をしています。 1つの戦略(キュー)を顧客の行があるし、自分の順番を待っています。しかし、どうすればラインの長さ?列に並んで取得するに誘惑されるだろうか?場合は、決定の行には何を取得し、その場合は、お手洗いに行くか、パーキングメーターにお金を置く必要がいることに気付く?瞬間の行の、あなたの地位を失う出ると、最初から待っているゲームを開始する必要があります。これは、サーバーが要求を管理する必要があると、クライアント接続の注意を投稿アーキテクチャーの観点のキューは、サーバーのために迷惑です。

もう一つのアプローチは、1つは、公平されると、それぞれの顧客は、木材の数を選択して注文を埋めるのは特別なピースしたいです。この命令は、営業担当者に提出され、彼または彼女はおよそときに、木材利用されることを教えてくれます。待機時間の間には、洗面所に、昼食を取る、または他のものの店行くことができます。注文とトークンのアプローチは、ストアからの木材の特殊な部分を準備するのにかかる時間を最適化するために待機して、顧客を分離することが可能になります。たとえば、受注の設定に基づいて、格納すると、注文の優先順位、能力に基づいてキューにすることができますし、複雑。このアーキテクチャは、一意であるために、と注文を送信するには、あなたの指示を受信リターンは、HTTP POSTを使用する場所コードでは、答えを見つけることができます。現在の表示は、としてプログラムで決定される可能性を提供する必要はありません。ティッカーのアプリケーションの場合では、場所をプログラムで決定されます。

 / pyservices /トレーダー/歴史/ティッカー

これは、ルートのURLは、HTTP POSTおよびGETを受け付ける表しています。するすべての使用可能な結果へのリンクのリストを返すのGETを実行する。結果は、純粋な計算の意味での結果やかもしれないが、相場アプリケーション、ティッカーの一覧の場合には監視されてすべての使用可能な結果の一覧を取得するときに、リストの意味を知っていない、無用の長物です。そのリストをティッカーため、アプリケーションが、それぞれの結果を見たティッカーを表して解読することは簡単です。しかし、どうすればルートのURLの計算を表す?結果の潜在的なリストのURLをランダムな数字のインデックスには、個々の結果を使用するなどがあります。これは、実際には非常に重要である示して結果をいくつかのメタデータに基づいて区別できるようにする。その場合、できない場合は、主要な問題に遭遇する予定です。

しかし、時には、任意のメタデータを記述しないでください。場合は、POSTは、特定のコンテキスト内でのみ、それは、クライアントの責任は、リンクを追跡するためにされている計算での結果を意味のある実行されます。ショッピングカートにこの概念をめぐり、ほとんどの店が、それらが存在しないメタデータ記述子です。いつストアにしている場合、ショッピングカートは、カート内の項目に基づいては、属している知っている。そこは、カートはないの識別子であり、偉大なイギリスのコメディアンの言葉で、"あなたまで、あなたのショッピングカートには、ストア内の食品を再配置の最適な方法です内容を買っていた"私はそう指摘しておきたい、あなたが、メタデータを使用しない結果を生成することができますこのような状況(および第7条で)カバーされる特化して時のルートURLに、POSTを実行する場合は、サーバー側でタスクを始めている。は、HTTPサーバーが要求を終了完了するすべての処理を期待し、HTTPサーバー上のタスクの起動に挑戦することができます。しかし、可能性ではなく、データの性質のため、これがあるため、あなたのサーバーを拡張する必要があります。

あなたのサーバーの拡張として、タスクを実行するスレッドを実行するか、またはタスクを実行するプロセスを開始するためのプロセス呼び出しを行うことを意味することができますような単純なことができます。に関係なく、どのようにタスクが実行されるのは、重要な側面は、要求のコンテキストでは、タスクを実行しないことです。 POSTの役割のタスクをクリックし、データを結合するためのタスクを実行される。後に、要求書を提出されていると、サーバーは、そのタスクを表す識別子を返す必要があります。識別子は、メタデータことができる、いくつかのランダムな番号、またはいくつかの任意のリンク。返される情報は、アルゴリズムは、データとメタデータへの完全なリンクを作成するにはクライアントのための十分なデータを提供する必要があります。

場合は、POST、任意の順序情報を提供しない場合は、仮定して、クライアントがどのように提出されたデータからのメタデータとリンクを作成するために知っている。この戦略の欠点は、もし、サーバー側のメタデータの変更は、クライアント側のコードを更新する必要があるということです。

 / pyservices /トレーダー/歴史/テロップ/ DELLの

このURLは、検索結果のルートURLを表します。唯一のHTTP動詞のGET、およびDELETEのサポートされています。動詞POSTの場合は、リクエストの結果を再計算を希望するサポートされることがあります。再計算を実行するとの懸念は、マルチユーザー環境の状況では、他のユーザーとは、データの一部が変更されて認識されないことは、新しいデータが表示されます。一般的に言えば、それを不変との結果を考慮する方が良い。できるようにサポートされてGET動詞の結果を取得。 DELETEの動詞は、リストからの結果をプルーニングするサポートされます。剪定ように、キャッシュには、意味がない、古い結果を乱雑になっていませんが必要です。ため、相場の歴史を時系列されているティッカーアプリケーションの場合には、DELETEのは適切でないと、あなたの時計を戻すことができます。剪定の時系列だけをするときに、コンテキストに適していない、古い考えられているいくつかのデータが適切です。

 / pyservices/trader/historical/tickers/DELL/2006

このURLは、結果の特定の部分を表すと、必要に応じて、常にサポートされる必要があります。その結果、子のURLを支える罰金には、クライアントのコードの結果を調整することができます。

/ pyservices /トレーダー/歴史/テロップ/ DELLの?フィルタ=今すぐ

このURLは罰金の別の方法を表し、結果をチューニング。行方不明の結果のリスクを実行しない場合は、その結果、今細かいことの値を持つフィルタを使用して、大量のデータを生成たとえば、最後の15日に結果を調整します。823175。たとえば、すべての計算の結果のため、定期的に、最後の15件の結果を取得するための呼び出しを待っているという。どのような場合は、チェック期間時間は、1時間の間、30の結果が生成されます?フィルタを使用する15件の結果を見逃して、最後の15を意味を取得します。ときと能力が失われることが結果を再度読み込むように安定性を維持するためには、過去15 deletes1取得のアプローチは、タスクベースを使用してはならない場合は、ブラウザのダウンロードを停止データです。どこの唯一の信頼性の高いキャッシュやストレージメカニズムは、サーバーがバックフィルを実行する方法を選択します。

罰金を最善の方法は、返されたデータの調整の結果にカーソルを使用することを設定します。がある場合は上記のURLに加えて計算する15件の結果、それぞれの結果をしている例については、固有のURLの結果を識別番号を使って参照する必要があります。時系列の一員として、その結果数を考えてみよう。タイムシリーズでは、すべての時間にダニが取得することも、すべての分刻み、すべての2番目のダニ。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この資料では"と、"HTTPの検証を使用して、自動ソフトウェアによって翻訳された。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 254 users browsing the articles directory