From 2f668f0b187c4a421b1ffa862e1c40553e8ab786 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 6 Jul 2022 16:27:23 -0300 Subject: [PATCH] Bug 31104: Put each link on a separate header This patch makes the Pagination helper put each Link entry on the response headers on a separate header. In practice, this leads to shorter headers and will avoid apache default/reasonable limits. To test: 1. Open the patron search page 2. Open the koha logs: $ tail -f /var/log/koha/kohadev/*.log 3. On the 'Search for patron' input, use a really long string, like 'superlongstringthatistoolongforapacheyeahsuperlong' => SUCCESS: There's no user with an attribute with that content :-D => FAIL: You get an error like (28)No space left on device: [client 127.0.0.1:60330] AH10124: header size is over the limit allowed by ResponseFieldSize (8192 bytes). Bad response header: 'Link:...' 4. Apply this patch 5. Restart all: $ restart_all 6. Repeat 2 and 3 => SUCCESS: No results => SUCCESS: No error in the logs 7. Run: $ kshell k$ prove t/Koha/REST/Plugin/Pagination.t \ t/db_dependent/api/v1/*.t => SUCCESS: Tests pass! Note 1: The Link header is expected to be in CSV format, which is usually the way libraries treat repeated headers anyway. Note 2: Apache is not rejecting the response, just stripping out the 'bad header'. So this is not a critical issue. Signed-off-by: Tomas Cohen Arazi Signed-off-by: Michal Urban Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi --- Koha/REST/Plugin/Pagination.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Koha/REST/Plugin/Pagination.pm b/Koha/REST/Plugin/Pagination.pm index 90d220c1cf..1176c834b6 100644 --- a/Koha/REST/Plugin/Pagination.pm +++ b/Koha/REST/Plugin/Pagination.pm @@ -111,7 +111,9 @@ If page size is omitted, it defaults to the value of the RESTdefaultPageSize sys { page => $pages, per_page => $per_page, rel => 'last', params => $args->{params} } ); # Add Link header - $c->res->headers->add( 'Link' => join( ',', @links ) ); + foreach my $link (@links) { + $c->res->headers->add( 'Link' => $link ); + } # Add X-Total-Count header $c->res->headers->add( 'X-Total-Count' => $total ); -- 2.39.5