2012-03-15 3 views
18

通常のhtmlページを生成するときにこのヘッダーを設定すると、私に利点がありますか?コンテンツの長さとその他のHTTPヘッダ?

は、私はそこにいくつかのフレームワークは、このヘッダープロパティを設定しますと、私はブラウザが速くなったりなめらかサイトをロードしてい

Content-Type: text/htmlのように、他のヘッダと一緒に)なぜ... 思っていたことがわかり?:)

PS:彼らはそれが好きですか:

ob_start(); 

... stuff here... 

$content = ob_get_contents(); 
$length = strlen($content); 

header('Content-Length: '.$length); 

echo $content; 
+0

下記の質問に答えてください。 – Neysor

答えて

17

私はそれがHTTPの仕様のためにのみ可能なすべての場合にこれを行うと言います。

アプリケーションでは、4.4節の規則で禁止されていない限り、メッセージ本文の転送長を示すためにこのフィールドを使用すべきである(SHOULD)。

at Pauls Answerは、Question of Deaomonでもご覧になれます。

私はこれもあなたに答えると思います。

他のヘッダーを持つファイルをダウンロードする場合は、Content-Lengthを使用する必要があります。 content-type: text/htmlが懸念している

<?php 
$file = "original.pdf" 
$size = filesize($file); 
header('Content-type: application/pdf'); 
header("Content-length: $size"); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
readfile($file); 
?> 
2

をその背後にある主な動機は、HTTP 1.1で再利用し、既存のTCP接続です。 Content-Lengthは、受信者の応答がどこで終了するかを区別できます。 その他のヘッダーは、MIMEタイプを指定するContent-Typeのように、受信者のためのもので、コンテンツの種類によって結果をどうするかを知ることができます。 たとえば、Firefoxでは、異なるMIMEタイプで実行することができます。あなたがポップアップすることができた場合は、ブラウザの者は、ダイアログ保存したり、application/pdf

+0

同じリクエストで2ページをリクエストしたいという意味ですか? – ellabeauty

+0

いいえ、それらは同じTCP接続のコンテキストで送信されます。この概念はHTTP永続接続と呼ばれます。 –

+0

hmmmしかし、http 1.1のブラウザ接続ではwikipediaで何を読んでいるのでしょうか?これは本当に必要ですか? – ellabeauty

11

Content-TypeとビューアでPDFを開く 通常のHTMLページを生成するとき、私は、このヘッダーを設定した場合、それは私にどんなメリットを与えていますか?

ブラウザが速くサイトやなめらかをロードしていますか?:)動的に生成されたページを

を、通常はありません。Content-Lengthは、ファイルのサイズをクライアントに通知します。ただし、Content-Lengthが指定されていない場合、転送はチャンク(ファイルの終わりを示す特別なチャンク)で送信されます。前者の方法は、チャンクに分割するオーバーヘッドがなくなるので、より高速な伝送が可能になる。しかし、これは通常、長さを決定するためにコンテンツ全体をバッファリングするために必要なリソースが、Content-Lengthを設定することによって得られる利点を上回る可能性があるため、静的ファイル用に最もよく予約されています。

+0

Chromeからデベロッパーツールのヘッダーを確認しましたが、PHPで設定しなくてもContent-Lengthヘッダーが設定されていることがわかりました。 – ellabeauty

+3

コンテンツの長さがOS/Webサーバーの送信バッファーサイズより小さい場合、 'Content-Length'はWebサーバーによって自動的に組み込まれます。しかし、長さがバッファーを超えると、コンテンツの長さは送信されず、代わりに 'Transfer-Encoding:chunked'が使用されることがわかります。 – webbiedave

+0

バッファサイズはどれくらいあるのですか? – ellabeauty

2

は、それが期待すると、通常はファイルを処理する方法をどのようなクライアントに伝えるために主です。ボットの場合は、SEOの目的には便利です。ボットにどのタイプのファイルがどのように解析/ランク付けされているかを伝えることができます。

content-lengthの場合、予想されるファイルの量と応答が終了する場所をクライアントに知らせるだけです。

0

リモートファイルのサイズを取得する最良の方法(それは私のために働いている):あなたはクライアントにあなたの応答を送信したいとき

$head = array_change_key_case(get_headers($file, TRUE)); 
$filesize = $head['content-length']; 
0

コンテンツの長さを設定するための一つのはずの良い使用でありますその後も時間のかかる操作を実行することができます。

this answerを参照してください。内容の長さを設定し、出力を書き込んだ後、クライアントでもう待たされることなくスクリプトで操作を実行できます。