From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Daniel Hartwig Newsgroups: gmane.lisp.guile.user,gmane.lisp.guile.bugs Subject: HTTP "Expires" header should handle non-date values Date: Sun, 27 Nov 2011 18:39:12 +0800 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=90e6ba1efba83cbb6204b2b4ff0a X-Trace: dough.gmane.org 1322390373 7592 80.91.229.12 (27 Nov 2011 10:39:33 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 27 Nov 2011 10:39:33 +0000 (UTC) Cc: bug-guile@gnu.org, guile-user@gnu.org To: "R. P. Dillon" Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sun Nov 27 11:39:29 2011 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RUc8t-00043d-FU for guile-user@m.gmane.org; Sun, 27 Nov 2011 11:39:27 +0100 Original-Received: from localhost ([::1]:36096 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUc8n-0007vm-NL for guile-user@m.gmane.org; Sun, 27 Nov 2011 05:39:21 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:42002) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUc8i-0007rN-73 for guile-user@gnu.org; Sun, 27 Nov 2011 05:39:18 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RUc8g-0004eY-Fv for guile-user@gnu.org; Sun, 27 Nov 2011 05:39:16 -0500 Original-Received: from mail-iy0-f169.google.com ([209.85.210.169]:57614) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUc8g-0004eK-8Y; Sun, 27 Nov 2011 05:39:14 -0500 Original-Received: by iaek3 with SMTP id k3so9194379iae.0 for ; Sun, 27 Nov 2011 02:39:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; bh=oMfqY5nbsimbeZ/DIGq77edRK+eEtVY8l3MuUIwzYPc=; b=aRFAn1zcM/fW+LDxL3dlgPFcez5TT0cTq0Z8OUKbMMMqpdRAm2hq/JmdLEtRmoy2Wf eAJmhPv3KINRs5tknkx2jAvF46s+baO9q+lxYuh1FRkiBtsxAMJ2sOWpbm2PXLiwCSjP 5aIKdvA2IFlwGFdIEKKX6oo170MIJbw7Q8mfg= Original-Received: by 10.42.131.135 with SMTP id z7mr1230848ics.23.1322390352870; Sun, 27 Nov 2011 02:39:12 -0800 (PST) Original-Received: by 10.231.206.138 with HTTP; Sun, 27 Nov 2011 02:39:12 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.210.169 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:9002 gmane.lisp.guile.bugs:5951 Archived-At: --90e6ba1efba83cbb6204b2b4ff0a Content-Type: text/plain; charset=ISO-8859-1 Package: guile Version: 2.0.3 Tags: patch On 6 November 2011 13:49, R. P. Dillon wrote: > (use-modules (web request) (web response) (web uri) (rnrs bytevectors)) > (define port (socket PF_INET SOCK_STREAM 0)) > (define address (addrinfo:addr (car (getaddrinfo "www.google.com" "http")))) > (connect port address) > (define request (build-request (build-uri 'http #:host "www.google.com"))) > (write-request request port) > (define response (read-response port)) > (read-response ...) consistently fails with Google: > web/http.scm:754:6: In procedure parse-asctime-date: > web/http.scm:754:6: Throw to key `bad-header' with args `(date "-1")'. > The expiration is set to -1 in the headers, and this seems to cause a > problem for the web libraries in Guile. > This same request seems to work well for my own domain (killring.org). This is definitely a bug on Guile's part, HTTP/1.1 permits such values for "Expires" headers [1], treating them as though they were a date in the past: HTTP/1.1 clients and caches MUST treat other invalid date formats, especially including the value "0", as in the past (i.e., "already expired"). [1] http://tools.ietf.org/html/rfc2616#section-14.21 Attached patch permits non-date values for "Expires", leaving them as strings (preferable, as such responses can be transparently forwarded to other clients). The staleness of a response could be determined quite crudely, e.g. (define (response-stale? r) (let ((expires (response-expires r))) (and expires (or (not (date? expires)) ;; Indicates already expired. (time<=? (date->time-utc expires) (current-time)))))) This approach completely ignores the recommended way of determining whether a response has expired. See section 13.2.4 of the RFC for calculations involving various factors such as the time that a request was sent, "Cache-Control" directives, etc. Regards Daniel --90e6ba1efba83cbb6204b2b4ff0a Content-Type: text/x-patch; charset=US-ASCII; name="0001-Permit-non-date-values-for-Expires-header.patch" Content-Disposition: attachment; filename="0001-Permit-non-date-values-for-Expires-header.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gvhx247v0 RnJvbSBkY2JjZDk0ZGI4OWE4ZTczZWJjMzA4OWE4NjA1NzViYmViOGQxNzA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgSGFydHdpZyA8bWFuZHlrZUBnbWFpbC5jb20+CkRh dGU6IFN1biwgMjcgTm92IDIwMTEgMTg6MjU6NTUgKzA4MDAKU3ViamVjdDogW1BBVENIXSBQZXJt aXQgbm9uLWRhdGUgdmFsdWVzIGZvciAiRXhwaXJlcyIgaGVhZGVyLgoKKiBtb2R1bGUvd2ViL2h0 dHAuc2NtICgiRXhwaXJlcyIpOiBQZXJtaXQgbm9uLWRhdGUgdmFsdWVzLgotLS0KIG1vZHVsZS93 ZWIvaHR0cC5zY20gICAgICAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysrKysrKy0KIHRlc3Qt c3VpdGUvdGVzdHMvd2ViLWh0dHAudGVzdCB8ICAgIDEgKwogMiBmaWxlcyBjaGFuZ2VkLCAyMCBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL21vZHVsZS93ZWIvaHR0 cC5zY20gYi9tb2R1bGUvd2ViL2h0dHAuc2NtCmluZGV4IGRjNzQyYTEuLjVlYjJlOTAgMTAwNjQ0 Ci0tLSBhL21vZHVsZS93ZWIvaHR0cC5zY20KKysrIGIvbW9kdWxlL3dlYi9odHRwLnNjbQpAQCAt MTUwMCw3ICsxNTAwLDI1IEBAIHBocmFzZVwiLiIKIAogOzsgRXhwaXJlcyA9IEhUVFAtZGF0ZQog OzsKLShkZWNsYXJlLWRhdGUtaGVhZGVyISAiRXhwaXJlcyIpCis7OyAuLi4KKzs7IEhUVFAvMS4x IGNsaWVudHMgYW5kIGNhY2hlcyBNVVNUIHRyZWF0IG90aGVyIGludmFsaWQgZGF0ZSBmb3JtYXRz LAorOzsgZXNwZWNpYWxseSBpbmNsdWRpbmcgdGhlIHZhbHVlICIwIiwgYXMgaW4gdGhlIHBhc3Qg KGkuZS4sICJhbHJlYWR5Cis7OyBleHBpcmVkIikuCis7OworKGRlY2xhcmUtaGVhZGVyISAiRXhw aXJlcyIKKyAgKGxhbWJkYSAoc3RyKQorICAgIChvciAoZmFsc2UtaWYtZXhjZXB0aW9uIChwYXJz ZS1kYXRlIHN0cikpCisgICAgICAgIHN0cikpCisgIChsYW1iZGEgKHZhbCkKKyAgICAob3IgKHN0 cmluZz8gdmFsKSAoZGF0ZT8gdmFsKSkpCisgIChsYW1iZGEgKHZhbCBwb3J0KQorICAgIChjb25k CisgICAgICgoc3RyaW5nPyB2YWwpCisgICAgICAoZGlzcGxheSB2YWwgcG9ydCkpCisgICAgICgo ZGF0ZT8gdmFsKQorICAgICAgKHdyaXRlLWRhdGUgdmFsIHBvcnQpKQorICAgICAoZWxzZQorICAg ICAgKGJhZC1oZWFkZXItY29tcG9uZW50ICdleHBpcmVzIHZhbCkpKSkpCiAKIDs7IExhc3QtTW9k aWZpZWQgPSBIVFRQLWRhdGUKIDs7CmRpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3dlYi1o dHRwLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL3dlYi1odHRwLnRlc3QKaW5kZXggYjZhYmJmMy4u Yzg4MTIyMyAxMDA2NDQKLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy93ZWItaHR0cC50ZXN0CisrKyBi L3Rlc3Qtc3VpdGUvdGVzdHMvd2ViLWh0dHAudGVzdApAQCAtMTM0LDYgKzEzNCw3IEBACiAgIChw YXNzLWlmLXBhcnNlIGV4cGlyZXMgIlR1ZSwgMTUgTm92IDE5OTQgMDg6MTI6MzEgR01UIgogICAg ICAgICAgICAgICAgICAoc3RyaW5nLT5kYXRlICJUdWUsIDE1IE5vdiAxOTk0IDA4OjEyOjMxICsw MDAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICJ+YSwgfmQgfmIgflkgfkg6fk06flMgfnoi KSkKKyAgKHBhc3MtaWYtcGFyc2UgZXhwaXJlcyAiMCIgIjAiKQogICAocGFzcy1pZi1wYXJzZSBs YXN0LW1vZGlmaWVkICJUdWUsIDE1IE5vdiAxOTk0IDA4OjEyOjMxIEdNVCIKICAgICAgICAgICAg ICAgICAgKHN0cmluZy0+ZGF0ZSAiVHVlLCAxNSBOb3YgMTk5NCAwODoxMjozMSArMDAwMCIKICAg ICAgICAgICAgICAgICAgICAgICAgICAifmEsIH5kIH5iIH5ZIH5IOn5NOn5TIH56IikpKQotLSAK MS43LjIuNQoK --90e6ba1efba83cbb6204b2b4ff0a--