summaryrefslogtreecommitdiff
path: root/src/http-header-glue.c
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2021-12-12 08:19:39 -0500
committerGlenn Strauss <gstrauss@gluelogic.com>2021-12-12 08:19:39 -0500
commit8fe93aa56b4a066df43c64c55b90c11d49969f90 (patch)
tree39e3965f77b87d7e0175ceffbc5a67c7a5aee591 /src/http-header-glue.c
parent3909e27f39a602dcdbbc7dec3f2602b3b1ae402e (diff)
downloadlighttpd-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.c11
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));
}
}