2010-11-26 22 views
3

Je me demandais s'il y a des problèmes ou des différences entre l'envoi d'en-têtes normaux avant ou après l'envoi d'en-têtes de cookie. Est-ce que certains navigateurs préfèrent un certain ordre aux en-têtes? Si l'en-tête du cookie est trop grand, les en-têtes suivants ne seront-ils jamais analysés?Envoyer des en-têtes HTTP avant ou après un en-tête de cookie?

setcookie("TestCookie", $value); 
header("Content-type: text/javascript"); 

ou

header('Location: http://www.example.com/'); 
setcookie("TestCookie", $value); 

ou

setcookie("SuperLargeCookie", $massive_value); 
setcookie("TinyCookie", $small_value); 
header("Status: 404 Not Found"); 

Répondre

4

Il n'y a pas de différence. Le protocole Http ne spécifie pas que les en-têtes doivent être dans un certain ordre. Les navigateurs ne se différencient pas en fonction de l'ordre des en-têtes non plus.

La longueur totale des en-têtes Http a une limite. Cette limite est imposée par le serveur et non par le navigateur. Typiquement entre 8K et 16K. Cependant ceci est configurable.

2

Il n'a vraiment pas d'importance tant que les autres en-têtes HTTP n'a pas été envoyé. setcookie() écrit en fait un en-tête lui-même:

Set-Cookie: SuperLargeCookie=whatever; Max-Age=3600; Version=1 

semblable à un appel header():

Location: http://www.example.com/redirect 
+0

"Cela n'a pas vraiment d'importance tant que les autres en-têtes HTTP n'ont pas été envoyés" ... attendez, alors c'est important? – Xeoncross

+0

si vous avez une sortie de texte intermédiaire entre les en-têtes et setcookie, cela aura de l'importance. et vous obtiendrez l'erreur familière "en-têtes déjà envoyés" – stillstanding

1

Les messages HTTP couvrent des paquets tout le temps, donc vous auriez du mal à en surcharger un à moins d'y bloquer des tonnes de kilo-octets. Si vous avez besoin de faire cela, pensez à un meilleur design. Les navigateurs ne se soucient pas de l'ordre des en-têtes car les différents serveurs (et applications) ajoutent des en-têtes tout le temps. Les cookies sont mis en œuvre les en-têtes HTTP, de sorte qu'ils doivent apparaître comme si dans la requête HTTP:

Cookie: TestCookie=value\r\n 
Content-type: text/javascript\r\n 
\r\n 

Je ne suis pas sûr de ce que l'en-tête d'état est censé faire dans votre exemple, mais je ne pense pas qu'il est juste depuis le serveur Web établira un 200 code de réponse OK si le code est exécuté correctement ... la page de la fonction d'en-tête a cette examaple:

<?php 
header("HTTP/1.0 404 Not Found"); 
?> 

Avec la fonction tête PHP , assurez-vous que vous n'êtes pas écrire un texte avant de l'émettre. Sinon, vous pourriez tout gâcher.

+0

L'en-tête de statut est pour PHPFastcgi - et était juste un exemple. – Xeoncross