This one's about as annoying as the content-length bug (a lot) and
about as difficult to work around (quite easy, actually).

Basically, if you don't explicitely clear headers after you serve a
request, *and* the client actually uses the same connection (i.e.
curl does this), the headers never get cleared, which leads to
surprising behaviour, such as a normal page serving a redirect
because the last page was a redirect.

This is also true for the response code, which is just as bad, if
not worse.

Code and output attached.

-Robin

-- 
Lojban Reason #17: http://en.wikipedia.org/wiki/Buffalo_buffalo
Proud Supporter of the Singularity Institute - http://singinst.org/
http://www.digitalkingdom.org/~rlpowell/ *** http://www.lojban.org/
(use hart)
(use riaxpander)
(use spiffy)
(use caketext)

; I don't know what this is supposed to do in its original form in
; http-server.scm, but right now it just breaks our tests
(http:content-parser 'application/x-www-form-urlencoded (lambda (a b c) (values 
#f #f)))

(spiffy-debug-mode #t)
(spiffy-tcp-port 7623)

(http:add-resource
  "/redir1.scm"
  (lambda (request get-args)
    (current-request request)
    (current-urlencoded-arguments get-args)
    (set-header! "Content-length: 0")
    (redirect "/data.scm")
    (write-response-header)))

(http:add-resource
  "/redir2.scm"
  (lambda (request get-args)
    (current-request request)
    (current-urlencoded-arguments get-args)
    (set-header! "Content-length: 0")
    (redirect "/data.scm")
    (write-response-header)
    (current-response-headers '())))

(http:add-resource
  "/data.scm"
  (lambda (request get-args)
    (current-request request)
    (current-urlencoded-arguments get-args)
    (set-header! "Content-length: 5")
    (write-response-header)
    (display "data\n")))

(start-server location: (get-host-name) init: noop)
$ curl -L -D - 'http://chain.teddyb.org:7623/redir1.scm'
HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 0

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 5

curl: (47) Maximum (50) redirects followed
$ curl -L -D - 'http://chain.teddyb.org:7623/redir2.scm'
HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Location: /data.scm
Content-length: 0

HTTP/1.1 302 Found
Server: spiffy No. 3 (Release 8) on Chicken 3.1.2
Content-length: 5

data
_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to