From 95d3f10bc96358eef717722e7a614a0970b3c8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Gu=C3=A9vel?= Date: Sun, 20 Apr 2025 16:06:55 +0200 Subject: [PATCH] HtmxMiddleware: add Vary header to prevent caching issues See https://htmx.org/docs/#caching --- src/jetzig/middleware/HtmxMiddleware.zig | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/jetzig/middleware/HtmxMiddleware.zig b/src/jetzig/middleware/HtmxMiddleware.zig index 26f26fd..06d7ffe 100644 --- a/src/jetzig/middleware/HtmxMiddleware.zig +++ b/src/jetzig/middleware/HtmxMiddleware.zig @@ -19,17 +19,21 @@ pub fn afterRequest(request: *jetzig.http.Request) !void { /// If a redirect was issued during request processing, reset any response data, set response /// status to `200 OK` and replace the `Location` header with a `HX-Redirect` header. +/// Add Vary response header to prevent caching the page without layout for requests not coming +/// from htmx. pub fn beforeResponse(request: *jetzig.http.Request, response: *jetzig.http.Response) !void { - switch (response.status_code) { - .moved_permanently, .found => {}, - else => return, - } - if (request.headers.get("HX-Request") == null) return; - if (response.headers.get("Location")) |location| { - response.status_code = .ok; - request.response_data.reset(); - try response.headers.append("HX-Redirect", location); + switch (response.status_code) { + .moved_permanently, .found => { + if (response.headers.get("Location")) |location| { + response.status_code = .ok; + request.response_data.reset(); + try response.headers.append("HX-Redirect", location); + } + }, + else => { + try response.headers.append("Vary", "HX-Request"); + }, } }