What headers do I want to send together with a 304 response?

前端 未结 2 377
既然无缘
既然无缘 2021-02-05 10:56

When I send a 304 response. How will the browser interpret other headers which I send together with the 304?

E.g.

header(\"HTTP/1.1 304 Not Modified\");
         


        
相关标签:
2条回答
  • 2021-02-05 11:31

    This blog post helped me a lot in order to tame the "conditional get" beast.

    An interesting excerpt (which partially contradicts Ben's answer) states that:

    If a normal response would have included an ETag header, that header must also be included in the 304 response.

    Cache headers (Expires, Cache-Control, and/or Vary), if their values might differ from those sent in a previous response.

    This is in complete accordance with the RFC 2616 sec 10.3.5.


    Below a 200 request...

    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
    

    ...And its optimal valid 304 counterpart.

    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
    

    Notice that the Expires header is at most Current Date + One Year as per RFC-2616 14.21.

    0 讨论(0)
  • 2021-02-05 11:35

    The Content-Type header only applies to responses which contain a body. A 304 response does not contain a body, so that header does not apply. Similarly, you don't want to send Last-Modified or ETag because a 304 response means that the document hasn't changed (and so neither have the values of those two headers).

    For an example, see this blog post by Anne van Kesteren examining WordPress' http_modified function. Note that it returns either Last-Modified and ETag or a 304 response.

    0 讨论(0)
提交回复
热议问题