--- modules/http/http_filters.c (revision 1874808) +++ modules/http/http_filters.c (working copy) @@ -1430,25 +1430,28 @@ h.bb = b2; if (r->status == HTTP_NOT_MODIFIED) { - apr_table_do((int (*)(void *, const char *, const char *)) form_header_field, - (void *) &h, r->headers_out, - "Connection", - "Keep-Alive", - "ETag", - "Content-Location", - "Expires", - "Cache-Control", - "Vary", - "Warning", - "WWW-Authenticate", - "Proxy-Authenticate", - "Set-Cookie", - "Set-Cookie2", - NULL); + /* + * List of headers Gecko doesn't update on a 304 (or 206 partial content) + * https://searchfox.org/mozilla-central/source/netwerk/protocol/http/nsHttpResponseHead.cpp#862 + */ + apr_table_unset(r->headers_out, "Connection"); + apr_table_unset(r->headers_out, "Proxy_Connection"); + apr_table_unset(r->headers_out, "Keep_Alive"); + apr_table_unset(r->headers_out, "Proxy_Authenticate"); + apr_table_unset(r->headers_out, "Proxy_Authorization"); + apr_table_unset(r->headers_out, "TE"); + apr_table_unset(r->headers_out, "Trailer"); + apr_table_unset(r->headers_out, "Transfer_Encoding"); + apr_table_unset(r->headers_out, "Upgrade"); + apr_table_unset(r->headers_out, "Content_Location"); + apr_table_unset(r->headers_out, "Content_MD5"); + apr_table_unset(r->headers_out, "ETag"); + apr_table_unset(r->headers_out, "Content_Encoding"); + apr_table_unset(r->headers_out, "Content_Range"); + apr_table_unset(r->headers_out, "Content_Type"); + apr_table_unset(r->headers_out, "Content_Length"); } - else { - send_all_header_fields(&h, r); - } + send_all_header_fields(&h, r); terminate_header(b2);