diff --git a/Network/Wai/Handler/Warp.hs b/Network/Wai/Handler/Warp.hs
--- a/Network/Wai/Handler/Warp.hs
+++ b/Network/Wai/Handler/Warp.hs
@@ -36,6 +36,7 @@
   , settingsManager
   , settingsFdCacheDuration
   , settingsBeforeMainLoop
+  , settingsNoParsePath
     -- * Data types
   , HostPreference (..)
   , Port
diff --git a/Network/Wai/Handler/Warp/Request.hs b/Network/Wai/Handler/Warp/Request.hs
--- a/Network/Wai/Handler/Warp/Request.hs
+++ b/Network/Wai/Handler/Warp/Request.hs
@@ -26,6 +26,7 @@
 import Network.Wai.Handler.Warp.Header
 import Network.Wai.Handler.Warp.ReadInt
 import Network.Wai.Handler.Warp.RequestHeader
+import Network.Wai.Handler.Warp.Settings (Settings, settingsNoParsePath)
 import qualified Network.Wai.Handler.Warp.Timeout as Timeout
 import Network.Wai.Handler.Warp.Types
 import Network.Wai.Internal
@@ -41,7 +42,8 @@
 
 -- | Receiving a HTTP request from 'Connection' and parsing its header
 --   to create 'Request'.
-recvRequest :: Connection
+recvRequest :: Settings
+            -> Connection
             -> InternalInfo
             -> SockAddr -- ^ Peer's address.
             -> Source IO ByteString -- ^ Where HTTP request comes from.
@@ -52,9 +54,9 @@
             -- 'IndexedHeader' of HTTP request for internal use, and
             -- leftover source (i.e. body and other HTTP reqeusts in HTTP pipelining).
 
-recvRequest conn ii addr src0 = do
+recvRequest settings conn ii addr src0 = do
     (src, hdrlines) <- src0 $$+ headerLines
-    (method, path, query, httpversion, hdr) <- parseHeaderLines hdrlines
+    (method, unparsedPath, path, query, httpversion, hdr) <- parseHeaderLines hdrlines
     let idxhdr = indexRequestHeader hdr
         expect = idxhdr ! idxExpect
         cl = idxhdr ! idxContentLength
@@ -65,7 +67,7 @@
             requestMethod     = method
           , httpVersion       = httpversion
           , pathInfo          = H.decodePathSegments path
-          , rawPathInfo       = path
+          , rawPathInfo       = if settingsNoParsePath settings then unparsedPath else path
           , rawQueryString    = query
           , queryString       = H.parseQuery query
           , requestHeaders    = hdr
diff --git a/Network/Wai/Handler/Warp/RequestHeader.hs b/Network/Wai/Handler/Warp/RequestHeader.hs
--- a/Network/Wai/Handler/Warp/RequestHeader.hs
+++ b/Network/Wai/Handler/Warp/RequestHeader.hs
@@ -27,6 +27,7 @@
 parseHeaderLines :: [ByteString]
                  -> IO (H.Method
                        ,ByteString  --  Path
+                       ,ByteString  --  Path, parsed
                        ,ByteString  --  Query
                        ,H.HttpVersion
                        ,H.RequestHeaders
@@ -36,7 +37,7 @@
     (method, path', query, httpversion) <- parseRequestLine firstLine
     let path = parsePath path'
         hdr = map parseHeader otherLines
-    return (method, path, query, httpversion, hdr)
+    return (method, path', path, query, httpversion, hdr)
 
 ----------------------------------------------------------------
 
diff --git a/Network/Wai/Handler/Warp/Run.hs b/Network/Wai/Handler/Warp/Run.hs
--- a/Network/Wai/Handler/Warp/Run.hs
+++ b/Network/Wai/Handler/Warp/Run.hs
@@ -228,7 +228,7 @@
     internalError = responseLBS H.internalServerError500 [(H.hContentType, "text/plain")] "Something went wrong"
 
     recvSendLoop fromClient = do
-        (req, idxhdr, getSource) <- recvRequest conn ii addr fromClient
+        (req, idxhdr, getSource) <- recvRequest settings conn ii addr fromClient
         case settingsIntercept settings req of
             Nothing -> do
                 -- Let the application run for as long as it wants
diff --git a/Network/Wai/Handler/Warp/Settings.hs b/Network/Wai/Handler/Warp/Settings.hs
--- a/Network/Wai/Handler/Warp/Settings.hs
+++ b/Network/Wai/Handler/Warp/Settings.hs
@@ -35,6 +35,14 @@
       -- Default: do nothing.
       --
       -- Since 1.3.6
+    , settingsNoParsePath :: Bool
+      -- ^ Perform no parsing on the rawPathInfo.
+      --
+      -- This is useful for writing HTTP proxies.
+      --
+      -- Default: False
+      --
+      -- Since 2.0.3
     }
 
 -- | The default settings for the Warp server. See the individual settings for
@@ -51,6 +59,7 @@
     , settingsManager = Nothing
     , settingsFdCacheDuration = 10
     , settingsBeforeMainLoop = return ()
+    , settingsNoParsePath = False
     }
 
 defaultExceptionHandler :: Maybe Request -> SomeException -> IO ()
diff --git a/warp.cabal b/warp.cabal
--- a/warp.cabal
+++ b/warp.cabal
@@ -1,5 +1,5 @@
 Name:                warp
-Version:             2.0.2.1
+Version:             2.0.3
 Synopsis:            A fast, light-weight web server for WAI applications.
 License:             MIT
 License-file:        LICENSE
