在Cookie标头之前或之后发送HTTP标头?

时间:2010-11-26 18:34:03

标签: php cookies http-headers

我想知道在发送Cookie标头之前或之后发送普通标头之间是否存在任何问题或区别。有些浏览器喜欢某个订单到标题吗?如果cookie标头很大,后续的标头永远不会被解析吗?

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

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

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

3 个答案:

答案 0 :(得分:4)

没有区别。 Http协议没有指定标头按特定顺序排列。浏览器也不会根据标题的顺序进行区分。

Http标头的总长度确实有限制。此限制由服务器而非浏览器强加。通常介于8K和16K之间。但是这是可配置的。

答案 1 :(得分:2)

只要尚未发送其他HTTP标头,这无关紧要。 setcookie()实际上自己写了一个标题:

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

类似于header()来电:

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

答案 2 :(得分:1)

HTTP消息始终跨越数据包,因此除非你在那里干扰大量的千字节,否则你很难过度填充。如果您需要这样做,请考虑更好的设计。浏览器不关心标题的顺序,因为不同的服务器(和应用程序)一直追加标题。 Cookie是作为HTTP标头实现的,因此它们应该在HTTP请求中显示为:

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

我不确定你的示例中应该对Status头做什么,但我不认为它是正确的,因为如果代码正确执行,webserver将设置200 OK响应代码... 标题功能页面有这个例子:

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

使用PHP 标题功能,只需确保在发出之前没有写出任何文本。否则,你可能会弄乱一切。