Skip to content

Commit

Permalink
fix: websocket multi-value connection upgrades
Browse files Browse the repository at this point in the history
Fixes an issue where browsers could send `keep-alive` and `Upgrade` in
the same request causing the `ws/upgrade-request?` to return false.
  • Loading branch information
rschmukler committed Nov 30, 2023
1 parent 3a736c0 commit 5aa8893
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
2 changes: 1 addition & 1 deletion ring-core/src/ring/websocket.clj
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"Returns true if the request map is a websocket upgrade request."
[request]
(let [headers (:headers request)]
(and (.equalsIgnoreCase "upgrade" (get headers "connection"))
(and (re-find #"\b(?i)upgrade\b" (get headers "connection"))
(.equalsIgnoreCase "websocket" (get headers "upgrade")))))

(defn websocket-response?
Expand Down
8 changes: 8 additions & 0 deletions ring-core/test/ring/test/websocket.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
[ring.websocket :as ws]
[ring.websocket.protocols :as wsp]))


(deftest test-upgrade-request?
(is (not (ws/upgrade-request? {})))
(is (ws/upgrade-request? {:headers {"connection" "Upgrade"
"upgrade" "websocket"}}))
(is (ws/upgrade-request? {:headers {"connection" "keep-alive, Upgrade"
"upgrade" "websocket"}})))

(deftest test-request-protocols
(is (empty? (ws/request-protocols {:headers {}})))
(is (= ["mqtt"]
Expand Down

0 comments on commit 5aa8893

Please sign in to comment.