72 votes

En-tête Content-Length avec les requêtes HEAD?

La spécification http dit à propos de l' HEAD demande:

Le CHEF de la méthode est identique pour les OBTENIR, sauf que le serveur ne DOIT PAS retourner un corps dans la réponse. La meta-information contenue dans l'entête HTTP de la réponse à une requête HEAD DEVRAIT être identique pour les renseignements transmis en réponse à une requête GET.

Si la réponse à une HEAD demande contient un Content-Length - tête? Si c'est la valeur qui serait retourné sur un GET la demande, même si il n'y a pas de corps de la réponse? Ou si le Contenu de Longueur 0?

58voto

nietaki Points 2272

Pour moi, il semble que le RFC HTTP 1.1 soit assez spécifique:

Le champ d'en-tête d'entité Content-Length indique la taille du corps d'entité, en nombre décimal d'OCTET, envoyé au destinataire ou, dans le cas de la méthode HEAD, la taille du corps d'entité qui aurait été envoyé si la demande était un GET .

45voto

Paul Dixon Points 122033

L'article 14.13 de HTTP/1.1 spec détaillée le Contenu de l'en-tête de Longueur, et dit ceci:

Les Applications DOIVENT utiliser ce champ pour indiquer le transfert de la longueur de la message du corps, sauf si cela est interdit par les règles de la section 4.4.

Le mot "devoir" a un sens très précis dans les Rfc:

  1. DEVRAIT Ce mot, ou l'adjectif "RECOMMANDÉ", signifie qu'il peut exister des raisons valides dans des circonstances particulières d'ignorer un élément en particulier, mais toutes les implications doivent être comprises et soigneusement pesé avant de choisir un cours différent.

Donc, vous ne pouvez pas toujours voir le Contenu de Longueur. Typiquement, vous pourriez ne pas le voir pour tout contenu qui est généré dynamiquement, depuis peut-être trop cher pour le service d'une étude exploratoire de la TÊTE de la demande. Par exemple, un CHEF demande à Apache pour un fichier statique va avoir un Contenu de Longueur, mais une demande pour un script PHP peut pas.

Par exemple, essayez de Google...

telnet www.google.com 80
HEAD / HTTP/1.0
Host:www.google.co.uk


HTTP/1.0 200 OK
Date: Mon, 04 Oct 2010 11:56:02 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Server: gws
X-XSS-Protection: 1; mode=block

Pas content-length là.

15voto

Daniel Vassallo Points 142049

Oui, la réponse Content-Length d'un HEAD DEVRAIT , mais pas toujours (voir la réponse de @Paul ) inclure la valeur Content-Length d'un GET réponse:

Le débordement de pile fait:

 > telnet stackoverflow.com 80
HEAD / HTTP/1.1
Host: stackoverflow.com


HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Length: 362245                           <--------
Content-Type: text/html; charset=utf-8
Expires: Mon, 04 Oct 2010 11:51:49 GMT
Last-Modified: Mon, 04 Oct 2010 11:50:49 GMT
Vary: *
Date: Mon, 04 Oct 2010 11:50:49 GMT
 

Google ne:

 > telnet www.google.com 80
HEAD / HTTP/1.1
Host: www.google.ie


HTTP/1.1 200 OK
Date: Mon, 04 Oct 2010 11:55:36 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Server: gws
X-XSS-Protection: 1; mode=block
Transfer-Encoding: chunked
 

8voto

mbanzon Points 1969

La spécification HTTP du W3C indique:

If the new field values indicate that the cached entity differs from the current entity (as would be indicated by a change in Content-Length, ...

Ce qui (pour moi) signifie qu'il devrait contenir la valeur "correcte" comme vous le feriez dans une réponse GET .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X