代码之家  ›  专栏  ›  技术社区  ›  Willem

我希望与304响应一起发送哪些标头?

  •  16
  • Willem  · 技术社区  · 17 年前

    当我发送304响应时。浏览器将如何解释我与304一起发送的其他标题?

    例如。

    header("HTTP/1.1 304 Not Modified");
    header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
    

    还有,其他标题呢?

    我是否应该将这样的标题与304一起发送:

    header('Content-Type: text/html');
    

    我是否必须发送:

    header("Last-Modified:" . $modified);
    header('Etag: ' . $etag);
    

    确保浏览器在下次$offset“用完”时发送条件GET请求,还是只保存上次修改的旧值和Etag值?

    2 回复  |  直到 16 年前
        1
  •  13
  •   Alexis Wilke    10 年前

    这 blog post 为了驯服“有条件获得”的野兽,我帮了很多忙。

    一段有趣的摘录(部分与本的答案相矛盾)指出:

    如果正常响应包含ETag头,则该头也必须包含在304响应中。

    RFC 2616 sec 10.3.5 .


    HTTP/1.1 200 OK
    Server: nginx/0.8.52
    Date: Thu, 18 Nov 2010 16:04:38 GMT
    Content-Type: image/png
    Last-Modified: Thu, 15 Oct 2009 02:04:11 GMT
    Expires: Thu, 31 Dec 2010 02:04:11 GMT
    Cache-Control: max-age=315360000
    Accept-Ranges: bytes
    Content-Length: 6394
    Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
    Connection: keep-alive
    Proxy-Connection: keep-alive
    X-Junk: xxxxxxxxxxxxxxxx
    

    …以及它的最佳对应物。

    HTTP/1.1 304 Not Modified
    Server: nginx/0.8.52
    Date: Thu, 18 Nov 2010 16:10:35 GMT
    Expires: Thu, 31 Dec 2011 16:10:35 GMT
    Cache-Control: max-age=315360000
    Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
    Connection: keep-alive
    Proxy-Connection: keep-alive
    X-Junk: xxxxxxxxxxx
    

    Expires 标题最多是 Current Date + One Year 根据 RFC-2616 14.21 .

        2
  •  6
  •   Ben Blank Jarret Hardie    17 年前

    这个 Content-Type 不 包含正文,以便标题不适用。同样,您也不想发送 Last-Modified 或 ETag 因为304响应意味着文档没有更改(这两个标题的值也没有更改)。

    this blog post by Anne van Kesteren 检查 WordPress http_modified 任何一个 最后修改 和 埃塔格 或 答复是304。