Skip to content

Commit

Permalink
Corrected lookup of mixed-case headers.
Browse files Browse the repository at this point in the history
Apparently this is temporary solution.
Perhaps a better one would be to put lower-case headers in all cases
(and maybe then convert them to Camel-Case in ring adapter)
  • Loading branch information
PetrGlad committed Mar 5, 2013
1 parent dc37f6d commit 0fbeb8c
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
5 changes: 3 additions & 2 deletions ring-core/src/ring/middleware/not_modified.clj
Expand Up @@ -2,14 +2,15 @@
"Middleware to return a 304 Not Modified response."
(:use [ring.util.time :only (parse-date)]
[ring.util.response :only (status)]
[ring.util.io :only (close!)]))
[ring.util.io :only (close!)]
[ring.util.headers :only (get-header)]))

(defn- etag-match? [request response]
(if-let [etag (get-in response [:headers "etag"])]
(= etag (get-in request [:headers "if-none-match"]))))

(defn- ^java.util.Date date-header [response header]
(if-let [http-date (get-in response [:headers header])]
(if-let [http-date (get-header response header)]
(parse-date http-date)))

(defn- not-modified-since? [request response]
Expand Down
12 changes: 12 additions & 0 deletions ring-core/src/ring/util/headers.clj
@@ -0,0 +1,12 @@
(ns ring.util.headers)

(defn get-header
"Get request or response header by name.
Lookup is case-insensitive"
[message header-name]
(let [normalized-name (.toLowerCase header-name)]
(-> (filter
#(= (-> % first .toLowerCase) normalized-name)
(:headers message))
first
second)))
7 changes: 7 additions & 0 deletions ring-core/test/ring/util/test/headers.clj
@@ -0,0 +1,7 @@
(ns ring.util.test.headers
(:use ring.util.headers
clojure.test))

(deftest test-get-header
(is (= "a" (get-header {:headers {"Some-Header" "a"}} "some-header")))
(is (nil? (get-header {:headers {"Same-Hero" "a"}} "some-header"))))

0 comments on commit 0fbeb8c

Please sign in to comment.