diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2021-12-12 08:19:39 -0500 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2021-12-12 08:19:39 -0500 |
commit | 8fe93aa56b4a066df43c64c55b90c11d49969f90 (patch) | |
tree | 39e3965f77b87d7e0175ceffbc5a67c7a5aee591 /src/http-header-glue.c | |
parent | 3909e27f39a602dcdbbc7dec3f2602b3b1ae402e (diff) | |
download | lighttpd-git-8fe93aa56b4a066df43c64c55b90c11d49969f90.tar.gz |
[core] use ETag response header to check cachable
honor ETag response header set in lua code in mod_magnet
(instead of having mod_magnet update r->physical.etag)
Diffstat (limited to 'src/http-header-glue.c')
-rw-r--r-- | src/http-header-glue.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/http-header-glue.c b/src/http-header-glue.c index 960afe4b..ec46558f 100644 --- a/src/http-header-glue.c +++ b/src/http-header-glue.c @@ -187,7 +187,7 @@ int http_response_handle_cachable(request_st * const r, const buffer * const lmo return HANDLER_GO_ON; } - const buffer *vb; + const buffer *vb, *etag; /* * 14.26 If-None-Match @@ -200,10 +200,12 @@ int http_response_handle_cachable(request_st * const r, const buffer * const lmo */ if ((vb = http_header_request_get(r, HTTP_HEADER_IF_NONE_MATCH, - CONST_STR_LEN("If-None-Match")))) { + CONST_STR_LEN("If-None-Match"))) + && (etag = http_header_response_get(r, HTTP_HEADER_ETAG, + CONST_STR_LEN("ETag")))) { /*(weak etag comparison must not be used for ranged requests)*/ int range_request = (0 != light_btst(r->rqst_htags, HTTP_HEADER_RANGE)); - if (http_etag_matches(&r->physical.etag, vb->ptr, !range_request)) { + if (http_etag_matches(etag, vb->ptr, !range_request)) { if (http_method_get_or_head(r->http_method)) { r->http_status = 304; return HANDLER_FINISHED; @@ -382,10 +384,9 @@ void http_response_send_file (request_st * const r, const buffer * const path, s const buffer *etag = stat_cache_etag_get(sce, r->conf.etag_flags); if (etag && !buffer_is_blank(etag)) { - buffer_copy_buffer(&r->physical.etag, etag); http_header_response_set(r, HTTP_HEADER_ETAG, CONST_STR_LEN("ETag"), - BUF_PTR_LEN(&r->physical.etag)); + BUF_PTR_LEN(etag)); } } |