diff --git a/src/uri/mod.rs b/src/uri/mod.rs
index 767f0743..c573c99e 100644
--- a/src/uri/mod.rs
+++ b/src/uri/mod.rs
@@ -862,11 +862,6 @@ fn parse_full(mut s: Bytes) -> Result<Uri, InvalidUri> {
         });
     }
 
-    // Authority is required when absolute
-    if authority_end == 0 {
-        return Err(ErrorKind::InvalidFormat.into());
-    }
-
     let authority = s.split_to(authority_end);
     let authority = Authority {
         data: unsafe { ByteStr::from_utf8_unchecked(authority) },
diff --git a/src/uri/tests.rs b/src/uri/tests.rs
index 719cb94e..2de3897e 100644
--- a/src/uri/tests.rs
+++ b/src/uri/tests.rs
@@ -384,6 +384,19 @@ test_parse! {
     port = Port::from_str("8008").ok(),
 }
 
+test_parse! {
+    test_file_no_host,
+    "file:///some/path",
+    [],
+
+    scheme = part!("file"),
+    authority = None,
+    host = None,
+    path = "/some/path",
+    query = None,
+    port = None,
+}
+
 test_parse! {
     test_percentage_encoded_path,
     "/echo/abcdefgh_i-j%20/abcdefg_i-j%20478",
@@ -419,7 +432,6 @@ fn test_uri_parse_error() {
         Uri::from_str(s).unwrap_err();
     }
 
-    err("http://");
     err("htt:p//host");
     err("hyper.rs/");
     err("hyper.rs?key=val");