[bknr-cvs] hans changed trunk/thirdparty/hunchentoot/misc.lisp
BKNR Commits
bknr at bknr.net
Mon Aug 29 07:11:05 UTC 2011
Revision: 4671
Author: hans
URL: http://bknr.net/trac/changeset/4671
Range handling fixes: Add "Accept-Ranges" header to static file
responses, report range only in partial responses, Fix off-by-one
errors (ranges are inclusive). Thanks to Wukix Inc. for reporting.
U trunk/thirdparty/hunchentoot/misc.lisp
Modified: trunk/thirdparty/hunchentoot/misc.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/misc.lisp 2011-08-29 05:42:50 UTC (rev 4670)
+++ trunk/thirdparty/hunchentoot/misc.lisp 2011-08-29 07:11:05 UTC (rev 4671)
@@ -139,10 +139,11 @@
(setf (return-code*) +http-requested-range-not-satisfiable+)
(throw 'handler-done
(format nil "invalid request range (requested ~D-~D, accepted 0-~D)"
- start end (file-length file))))
+ start end (1- (file-length file)))))
(file-position file start)
(setf (return-code*) +http-partial-content+
- bytes-to-send (1+ (- end start))))
+ bytes-to-send (1+ (- end start))
+ (header-out :content-range) (format nil "bytes ~D-~D/*" start end)))
bytes-to-send))
(defun handle-static-file (pathname &optional content-type)
@@ -162,14 +163,14 @@
(setf (content-type*) (or content-type
(mime-type pathname)
"application/octet-stream")
- (header-out :last-modified) (rfc-1123-date time))
+ (header-out :last-modified) (rfc-1123-date time)
+ (header-out :accept-ranges) "bytes")
(handle-if-modified-since time)
(with-open-file (file pathname
:direction :input
:element-type 'octet
:if-does-not-exist nil)
- (setf (header-out :content-range) (format nil "bytes 0-~D/*" (1- (file-length file)))
- bytes-to-send (maybe-handle-range-header file)
+ (setf bytes-to-send (maybe-handle-range-header file)
(content-length*) bytes-to-send)
(let ((out (send-headers))
(buf (make-array +buffer-length+ :element-type 'octet)))
More information about the Bknr-cvs
mailing list