【问题标题】:Send HTTP headers before or after a cookie header?在 cookie 标头之前或之后发送 HTTP 标头?
【发布时间】:2010-11-26 18:34:02
【问题描述】:

我想知道在发送 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");

【问题讨论】:

    标签: php cookies http-headers


    【解决方案1】:

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

    Http headers 的总长度是有限制的。这个限制是由服务器而不是浏览器强加的。通常在 8K 和 16K 之间。不过这是可配置的。

    【讨论】:

      【解决方案2】:

      只要还没有发送其他 HTTP 标头,这真的没关系。 setcookie()其实自己写了一个header:

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

      类似于header() 调用:

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

      【讨论】:

      • “只要没有发送其他 HTTP 标头,这真的没关系” ...等等,那么它有关系吗?
      • 如果您在标题和 setcookie 之间有干预文本输出,这将很重要。你会得到熟悉的“标头已发送”错误
      【解决方案3】:

      HTTP 消息始终跨越数据包,因此除非您在其中塞入大量千字节,否则您很难将其填满。如果您需要这样做,请考虑更好的设计。浏览器不关心标头的顺序,因为不同的服务器(和应用程序)总是附加标头。 Cookie 是作为 HTTP 标头实现的,因此它们在 HTTP 请求中应该如下所示:

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

      我不确定您的示例中的 Status 标头应该做什么,但我认为这不正确,因为如果代码执行正确,网络服务器将设置 200 OK 响应代码... header 功能页有这个例子:

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

      使用 PHP header 函数,只需确保在发布之前没有写出任何文本。否则,您可能会搞砸一切。

      【讨论】:

      • 状态标头用于 PHPFastcgi - 只是一个示例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 2015-04-30
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多