2012-03-15 17 views
18

Mi dà alcun vantaggio se imposto questa intestazione quando si generano normali pagine html?Lunghezza contenuto e altre intestazioni HTTP?

Vedo che alcuni quadri là fuori saranno impostare questa proprietà intestazione e mi chiedevo perché ... (Insieme con altre intestazioni, come Content-Type: text/html)

Ha navigatore caricare il sito più veloce o si dovrebbe occupare? :)

ps: lo fanno come:

ob_start(); 

... stuff here... 

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

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

echo $content; 
+0

Rispondi alla tua domanda non elencata di seguito? – Neysor

risposta

17

Penso che sia solo per la specifica HTTP che dice di farlo in ogni caso possibile.

Applicazioni DOVREBBE utilizzare questo campo per indicare la lunghezza di trasferimento del corpo del messaggio, a meno che ciò non sia vietato dalle regole nella sezione 4.4.

È inoltre possibile cercare at Pauls Answer su Question of Deaomon.

Penso che questo risponda anche al tuo.

Inoltre, si dovrebbe utilizzare Content-Length se si desidera che qualcuno scarichi un file con un'altra intestazione: ad es.

<?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

La motivazione principale dietro di esso è ri-utilizzando una connessione TCP esistente in HTTP 1.1. Content-Length può delimitare dove finisce la risposta per il destinatario. Come per le altre intestazioni, come Content-Type che specifica il tipo MIME, sono per il destinatario in modo che lei sappia cosa fare con il risultato in base al tipo di contenuto Ad esempio, in Firefox è possibile specificare quale azione da eseguire con diversi tipi MIME. Se è possibile pop-up del browser del salvataggio di dialogo o aprire un file PDF in visore con Content-Type di application/pdf

+0

vuoi dire come richiedere due pagine nella stessa richiesta? – ellabeauty

+0

No, vengono inviati nel contesto della stessa connessione TCP. Il concetto è chiamato una connessione persistente HTTP. –

+0

hmmm ma da quello che sto leggendo in wikipedia nelle connessioni del browser http 1.1 sono persistenti di default, quindi è davvero necessario? – ellabeauty

11

Ha mi dà alcun vantaggio se ho impostato questa intestazione quando si generano pagine html normali?

viene caricato del browser il sito più veloce o si dovrebbe occupare? :)

Per le pagine generate dinamicamente, di solito non.Content-Length consente al client di sapere quanto è grande il file. Tuttavia, se non è specificato Content-Length, il trasferimento viene inviato in blocchi (con un chunk speciale che indica la fine del file). Il precedente metodo può comportare una trasmissione più rapida poiché viene eliminato il sovraccarico dovuto alla suddivisione in blocchi. Tuttavia, di solito è meglio riservare i file statici in quanto le risorse necessarie per bufferizzare l'intero contenuto al fine di determinare la lunghezza possono superare qualsiasi vantaggio ottenuto impostando Content-Length.

+0

Ho controllato le intestazioni negli strumenti di sviluppo da Chrome e vedo che l'intestazione Content-Length è impostata anche se non la imposto in PHP. – ellabeauty

+3

Se la lunghezza del contenuto è inferiore alla dimensione del buffer di invio del server Web/OS, il 'Content-Length' verrà automaticamente incluso dal server web. Tuttavia, se la lunghezza supera il buffer, vedrai che la lunghezza del contenuto non verrà inviata e, invece, verrà utilizzato 'Transfer-Encoding: chunked'. – webbiedave

+0

sai come posso scoprire quanto è la dimensione del buffer? – ellabeauty

2

Dove content-type: text/html è interessato, è soprattutto per dire al cliente che cosa aspettarsi e di solito come gestire il file. Nel caso dei bot, può essere utile ai fini SEO in quanto indica al bot quale tipo di file sta guardando, in modo che possa cambiare il modo in cui viene analizzato/classificato.

Nel caso di content-length, è solo per far sapere al client quanto è grande un file e quindi dove finisce la risposta.

0

Il modo migliore (che sta lavorando per me) di ottenere dimensioni di un file remoto:

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

un presunto buon uso per impostare il Content-Length è quando si desidera inviare la vostra risposta al client anche se ti piacerebbe ancora eseguire più operazioni lunghe in seguito.

Vedere this answer che spiega che è necessario impostare la lunghezza del contenuto, scrivere l'output e quindi eseguire ulteriori operazioni nello script senza attendere ulteriormente il client.

Problemi correlati