ホームページ >バックエンド開発 >PHPチュートリアル >キープアライブ モードでの HTTP リクエストの終了の判断_PHP チュートリアル
短い接続方法を使用する場合、各 HTTP リクエストは TCP 接続に対応し、リクエストが完了すると接続は直ちに切断され、サーバーは EOF を返します。したがって、リクエストの終了は EOF に基づいて判断できます。次のコード (PHP) が非常に一般的です。
クリップボードにコピー引用コンテンツ: [www.bkjia.com] // $fp は fsockopen() によって生成されたハンドルです while(!feof($fp)) {HTTP の長時間接続 (永続接続とも呼ばれる) モードでは、サーバーはデータ送信後に接続を切断せず、次の HTTP リクエストまで接続を維持するため、長時間接続のメリットは明らかです。 TCP 接続 今後のリクエスト
中に接続を確立/切断するオーバーヘッドを節約します。 TCP 接続が終了(タイムアウトまたはエラー)するまで EOF は送信されないため、上記の方法では HTTP リクエストの終了を判断できません。これは、長い接続を使用する場合にも発生する問題です。現在、主に 2 つの判断方法があります: (1)
ヘッダーの Content-Length フィールドによる。このフィールドはテキストの長さを示し、指定された長さの文字を受信することに基づいて終了を判断できます。 (2) Content-Lengthがない場合、Transfer-Encodingに基づく。
テキストが動的に生成される可能性があるため、サーバーがテキストのサイズを判断できない場合があるため、Content-Length は提供されず、代わりにチャンク エンコーディングが使用されてテキストを部分ごとに送信します。各チャンク ブロックは、ヘッダーとボディの 2 つの部分で構成されます。ヘッダー内の 16 進数はボディの長さを指定します。最後に、長さ 0 のチャンク ブロックは HTTP ボディ全体の終わりを示します。
1.コンテンツの長さの値を取得します
クリップボードにコピー引用コンテンツ: [www.bkjia.com] $length = 0; $line = ''; while($line !== "rn") {クリップボードにコピー
引用コンテンツ: [www.bkjia.com] $sum = 0; while($sum < $length) { $line = fgets($fp); echo $line ;