初心者からのJavaネットワークプログラミングProfessionalへ:HTTPヘッダフィールド



まず、一般的なヘッダフィールド

1。接続

このフィールドには、HTTP1.1の合意にのみ存在します。これは、クライアントとサーバーのセッションのために判断すると、サーバはすぐにネットワーク接続をシャットダウンされます。クライアントのパフォーマンスは、直ちに-1(ReadLineメソッドはnullを返します)を返すかどうかを最も直接的なreadメソッドを(readLineメソッドは同じです)クライアントの要求のWeb読書リソースを使用することです。接続の二つの値があります:および[閉じる] Keep - Alive接続を使用する場合:HTTP1.0契約が閉じるときと同じ、データはすぐにメソッドの戻り値を読んで読んだとき、および接続を使用します:Keep - Aliveタイム、読書のメソッドを読むデータが決まったら、しばらくの間ブロックされる。、タイムアウトの後にデータを読み込むが、実行を押し続けた。前回の記事についてreadHttpResponseで(...)最初の011行のメソッドの実装では、接続の役割を確認してください。のは、HTTPのシミュレータを用いて実験をやってみましょう。

(1)入力、次のHTTPシミュレータドメイン名:

www.baidu.com

(2)は、HTTPシミュレータのHTTP要求には、次の情報を入力する:

/ HTTP/1.1をGETを

ホスト:www.baidu.com

(3)ダブルキャリッジリターン、(空白の行を入力します。)要求メッセージを送信し、図1は、HTTPレスポンスメッセージのヘッダーに示すように:






図1

(4)入力yまたはYの後、応答メッセージの内容を表示します(表示HTTP応答ヘッダーは、すぐにYまたはyを入力してください)。プロンプト(コードの004行のsendHttpRequest(のように)実装では、データが設定されたタイムアウトして読み取る):表示内容の後、約10秒間は、"ポート は、ホスト"を入力してください。

(5)内の"ホスト:ポート "www.baidu.comを最後に使用した名前を指定し、80ポートを入力し、Enterキーを押し、入力します。更新は、次のHTTP要求を入力:

/ HTTP/1.1をGETを

ホスト:www.baidu.com

接続:閉じる

上記のHTTPリクエストを入力した後、再度最初の一歩を3,4を実行します。最後に、直接ストレートにHTTP応答メッセージの表示内容は、"ホスト:ポート "プロンプトが表示されます。このメソッドに加えて、リクエストの最初の行は、/ HTTP/1.0をGETを読んで下さい。これは、待つことができない終了します。

接続を設定することで、すぐに(マルチスレッドのダウンロードツール、Webブラウザなど)は、Webリソースをダウンロードすることができます事実上クライアントのリソース消費量を減らすことができる、ネットワークから切断します。

2。日

Dateヘッダフィールドは、要求メッセージを記述する応答メッセージが作成されます。このフィールドの値は、HTTP - date型ですが、GMT(グリニッジ)の時間にする必要があります、GMT時間はGMTマイナス8時間です。ここではフィールド日付の例です:

日付:Tue、2007年11月15日8時12分31秒GMTに

3のContent - Length

バイト数は、メッセージのエンティティを指定します。要求メッセージのPOSTメソッドは、エンティティのコンテンツ内の指定されたバイト数にContent - Lengthが要求メッセージを使用する必要があります。HTTPレスポンスで指定されたメッセージのフィールドの値に応答して、現在のWebリソースによってバイト数が返されます。

第二に、HTTPリクエストヘッダフィールド

1。ホスト

ホストフィールドは、クライアントのホスト名とポート番号でアクセスされるリソースを指定するために使用されています。ポート番号は、サーバに接続するときに使用する場合は、ポート番号に等しい場合は、ポート番号は省略することができます。ここでは[Host]フィールドを使用した例です:

ホスト:www.sina.com.cn

HTTPリクエストは、このフィールドが含まれていない場合、このフィールドは、必要な場合、サーバーは400(悪い要求)の応答ステータスが返されます。

2。受け付ける

ヘッダフィールドを受け入れ、クライアントはメディアタイプを受け取ることができるかを確認します。一般的な形式は"*/*"またはサブタイプが"で区切られた複数のメディアタイプを渡すことができますこのヘッド、サブパラグラフ"とは、"分離"/タイプ"です。次の例では、されている場合を受け入れます:

受け入れ::/ jpg画像/ gif形式、画像

上記の使用許可要求ヘッダーフィールドの値が、サーバー側は動的gif画像が存在しない場合は画像の形式画像のJPG含まれている、gif形式が含まれている場合IMGでページが最初に頭になる生成されます。

3のUser - Agentは、

このフィールドは、最初にそれがIE6のブラウザの場合どのようなサーバーにアクセスするクライアントを指定するために使用される装置がインストールされている。2.0ネットのUser - Agentは、次の値になります:

のUser - Agent:Mozillaおよび(

互換性のある;

MSIE 6.0;

Windowsは5.2 6.0;

SV1は、Maxthonは;

の。NET CLR 1.1.4322;

の。NET CLR 2.0.50727;

InfoPath.1; InfoPath.2)

サーバーは、ブラウザクライアントのこのフィールドのバージョンを使用できるクライアントに送信されるデータの異なるバージョンに応じて決定を確認してください。

4。レンジ

Rangeフィールドは、最初のWebリソースのサーバー部分のみを介して送信されます。このフィールドは、ヘッダー機能をHTTPを実装するために使用することができます。多くのダウンロードツールは、HTTPヘッダー内のこのフィールドを介してありますです。範囲フィールドは、送信するバイトの3つの形式の範囲で設定できます:

(1)範囲:バイト= 1000から2000

1000から2000バイトの伝送範囲。

(2)範囲:バイト= 1000 -

すべてのコンテンツの最初の1000バイトの後のトランスポートWebリソース。

(3)範囲は= 1000バイト

転送の最後の1000バイト。

第三に、HTTPレスポンスメッセージのヘッダーフィールドは、

1のAccept - Ranges

このフィールドには、サポートされている場合、Webサーバーは、(HTTPの機能をサポートするかどうか)の戻りを範囲をサポートするかどうかを示す範囲を受け入れる:バイト、そうでない場合はサポート、リターンの範囲を受け入れます:なし。

2コンテンツの範囲

先頭バイトの範囲指定したWebリソースへ。このフィールドの値のフォーマットは以下です:

開始バイト位置 - バイト位置/ Webリソースの合計バイト数の終わり

ここでコンテンツの範囲を使用しての例です:

コンテンツの範囲:1000 - 5000分の3000

テスト

は、HTTPシミュレータfiles.cnblogs.com内のサーバーに接続し、次のHTTPリクエストメッセージを入力:

のGET / / HttpSimulator.rar HTTP/1.1のnokiaguy

ホストは:files.cnblogs.com

範囲:バイト= 1000 -

図2に示すように返されるレスポンスヘッダ:






図2

これは、伝達関数は、サポートにブレークポイントをfiles.cnblogs.com、次のサーバから見ることができます。しかし、また、Content - Lengthが値ではなく、Webリソースを、合計バイト数を通過するセッションの現在のバイト数であることを確認する。"/"Webリソースの数字が続くのContent - Rangeフィールドの値はバイトの合計数です。

3。ロケーション

このフィールドには、アドレスを指定する新しいWebリソースへの新しいアクセスします。、元のURLにアクセスするために使用場所を新しいURLにクライアントに返さしたがって、古いユーザーは、Webリソースの置換のURL、ユーザーは古い新しいURLの一部に追いつくことができないとき。このアドレス変換は、ユーザに対して完全に透過的です。