http doesn't keep-alive requests for which there was an error
authorAndy Wingo <wingo@pobox.com>
Sun, 5 Dec 2010 19:24:14 +0000 (20:24 +0100)
committerAndy Wingo <wingo@pobox.com>
Sun, 5 Dec 2010 19:24:14 +0000 (20:24 +0100)
* module/web/server/http.scm (keep-alive?): Don't keep the client around
  if there is an error.

module/web/server/http.scm

index 150b73e..1eefc0a 100644 (file)
 
 (define (keep-alive? response)
   (let ((v (response-version response)))
-    (case (car v)
-      ((1)
-       (case (cdr v)
-         ((1) #t)
-         ((0) (memq 'keep-alive (response-connection response)))))
-      (else #f))))
+    (and (or (< (response-code response) 400)
+             (= (response-code response) 404))
+         (case (car v)
+           ((1)
+            (case (cdr v)
+              ((1) (not (memq 'close (response-connection response))))
+              ((0) (memq 'keep-alive (response-connection response)))))
+           (else #f)))))
 
 ;; -> 0 values
 (define (http-write server client response body)