ホームページ  >  記事  >  バックエンド開発  >  キープアライブ モードでの HTTP リクエストの終了の判断_PHP チュートリアル

キープアライブ モードでの HTTP リクエストの終了の判断_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:53:51884ブラウズ

短い接続方法を使用する場合、各 HTTP リクエストは TCP 接続に対応し、リクエストが完了すると接続は直ちに切断され、サーバーは EOF を返します。したがって、リクエストの終了は EOF に基づいて判断できます。次のコード (PHP) が非常に一般的です。

クリップボードにコピー引用コンテンツ: Liehuo.Net Codes[www.bkjia.com] // $fp は fsockopen() によって生成されたハンドルです while(!feof($fp)) {
echo fgets($fp)
}
(注: 短い接続モードはヘッダーで「接続: クローズ」とマークされ、長い接続は「接続: キープアライブ」とマークされます。現在、HTTP/1.0 はデフォルトで短い接続を使用し、HTTP/1.1 はデフォルトで短い接続を使用します。デフォルトでは長い接続が使用されます。)

HTTP の長時間接続 (永続接続とも呼ばれる) モードでは、サーバーはデータ送信後に接続を切断せず、次の HTTP リクエストまで接続を維持するため、長時間接続のメリットは明らかです。 TCP 接続 今後のリクエスト

中に接続を確立/切断するオーバーヘッドを節約します。 TCP 接続が終了(タイムアウトまたはエラー)するまで EOF は送信されないため、上記の方法では HTTP リクエストの終了を判断できません。これは、長い接続を使用する場合にも発生する問題です。現在、主に 2 つの判断方法があります: (1)

ヘッダーの Content-Length フィールドによる。

このフィールドはテキストの長さを示し、指定された長さの文字を受信することに基づいて終了を判断できます。 (2) Content-Lengthがない場合、Transfer-Encodingに基づく。
テキストが動的に生成される可能性があるため、サーバーがテキストのサイズを判断できない場合があるため、Content-Length は提供されず、代わりにチャンク エンコーディングが使用されてテキストを部分ごとに送信します。各チャンク ブロックは、ヘッダーとボディの 2 つの部分で構成されます。ヘッダー内の 16 進数はボディの長さを指定します。最後に、長さ 0 のチャンク ブロックは HTTP ボディ全体の終わりを示します。

以下では、Content-Length がある場合の判定メソッドを PHP を使用して実装します:

1.コンテンツの長さの値を取得します

クリップボードにコピー引用コンテンツ: [www.bkjia.com]Liehuo.Net Codes $length = 0; $line = ''; while($line !== "rn") {
$line = fgets($fp); 'Content-Length:') {
$length = intval(substr($line, 16));
}
}

2. テキストを取得します

クリップボードにコピー

引用コンテンツ: [www.bkjia.com] $sum = 0; Liehuo.Net Codeswhile($sum < $length) { $line = fgets($fp); echo $line ;



http://www.bkjia.com/PHPjc/364733.html
www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/364733.html技術記事短い接続方法を使用する場合、各 HTTP リクエストは TCP 接続に対応し、リクエストが完了すると接続は直ちに切断され、サーバーは EOF を返します。したがって、リクエストの終了は次のように EOF に基づいて判断できます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。