From e903c0cf57a770a929c6bdb0909c3abd3409f5e2 Mon Sep 17 00:00:00 2001 From: Shams Date: Fri, 8 Feb 2019 10:14:27 -0600 Subject: [PATCH] uses x-forwarded-proto-version for protocol version when available (#584) --- waiter/src/waiter/core.clj | 5 ++++- waiter/test/waiter/core_test.clj | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/waiter/src/waiter/core.clj b/waiter/src/waiter/core.clj index 28cc38bae..c0ae798cc 100644 --- a/waiter/src/waiter/core.clj +++ b/waiter/src/waiter/core.clj @@ -192,7 +192,10 @@ For WebSocket requests, it returns values like WS/8, WS/13." [{:keys [headers scheme ^ServletRequest servlet-request]}] (if servlet-request - (.getProtocol servlet-request) + (or (some-> headers + (get "x-forwarded-proto-version") + str/upper-case) + (.getProtocol servlet-request)) (when scheme (str/upper-case ;; currently, only websockets need this branch to determine version diff --git a/waiter/test/waiter/core_test.clj b/waiter/test/waiter/core_test.clj index 0a256f2fe..7d18c1694 100644 --- a/waiter/test/waiter/core_test.clj +++ b/waiter/test/waiter/core_test.clj @@ -1429,7 +1429,10 @@ (deftest test-request->protocol (is (nil? (request->protocol {}))) + (is (nil? (request->protocol {:headers {"x-forwarded-proto-version" "Foo/Bar"}}))) (is (= "HTTP" (request->protocol {:scheme :http}))) + (is (= "FOO/BAR" (request->protocol {:headers {"x-forwarded-proto-version" "Foo/Bar"} + :servlet-request (Object.)}))) (is (= "HTTP/1.1" (request->protocol {:scheme :http :servlet-request (reify ServletRequest (getProtocol [_] "HTTP/1.1"))})))