From fa45850cbba484d4335bc1ce1b33263ce4a8417e Mon Sep 17 00:00:00 2001
From: Martin Nilsson <nilsson@fastmail.com>
Date: Fri, 30 Mar 2018 03:25:54 +0200
Subject: [PATCH] Some sort of handling of multiple header of the same kind.
 Does not introduce any new arrays, as to keep it somewhat compatible with
 existing code.

---
 .../Protocols.pmod/HTTP.pmod/Query.pike       | 39 ++++++++++++++++---
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
index 86e6a6e248..00d2434338 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
@@ -162,11 +162,40 @@ protected int ponder_answer( int|void start_position )
       sscanf(s,"%[!-9;-~]%*[ \t]:%*[ \t]%s",n,d);
       switch(n=lower_case(n))
       {
-	 case "set-cookie":
-	    headers[n]=(headers[n]||({}))+({d});
-	    break;
-	 default:
-	   headers[n]=d;
+      case "set-cookie":
+        headers[n]=(headers[n]||({}))+({d});
+        break;
+
+      case "accept-ranges":
+      case "age":
+      case "connection":
+      case "content-type":
+      case "content-encoding":
+      case "date":
+      case "etag":
+      case "keep-alive":
+      case "last-modified":
+      case "location":
+      case "retry-after":
+      case "transfer-encoding":
+        headers[n]=d;
+        break;
+
+      case "allow":
+      case "cache-control":
+      case "vary":
+        if( headers[n] )
+          headers[n] += ", " +d;
+        else
+          headers[n] = d;
+        break;
+
+      default:
+        if( headers[n] )
+          headers[n] += "; " +d;
+        else
+          headers[n] = d;
+        break;
       }
    }
 
-- 
GitLab