content length, file not found
diff --git a/lib/shelf_static.dart b/lib/shelf_static.dart
index dbaa478..dc22e83 100644
--- a/lib/shelf_static.dart
+++ b/lib/shelf_static.dart
@@ -9,6 +9,7 @@
 // default document
 // sym links
 // mime type handling
+// hidden files
 
 Handler getHandler(String fileSystemPath) {
   return (Request request) {
@@ -20,12 +21,23 @@
     var requestedPath = p.joinAll(segs);
     var file = new File(requestedPath);
 
-    return file.resolveSymbolicLinks().then((String resolvedPath) {
-      if(!p.isWithin(rootPath, resolvedPath)) {
-        throw 'Requested path ${request.pathInfo} resolved to $resolvedPath is not under $rootPath.';
-      }
+    if (!file.existsSync()) {
+      return new Response.notFound('Not Found');
+    }
 
-      return new Response.ok(file.openRead());
-    });
+    var resolvedPath = file.resolveSymbolicLinksSync();
+
+    if (!p.isWithin(rootPath, resolvedPath)) {
+      throw 'Requested path ${request.pathInfo} resolved to $resolvedPath '
+          'is not under $rootPath.';
+    }
+
+    var stats = file.statSync();
+
+    var headers = {
+      HttpHeaders.CONTENT_LENGTH: stats.size
+    };
+
+    return new Response.ok(file.openRead(), headers: headers);
   };
 }
diff --git a/test/basic_file_test.dart b/test/basic_file_test.dart
index d41c6d0..6e6aecb 100644
--- a/test/basic_file_test.dart
+++ b/test/basic_file_test.dart
@@ -8,7 +8,6 @@
 import 'test_util.dart';
 
 void main() {
-
   setUp(() {
     var tempDir;
     schedule(() {
@@ -32,16 +31,26 @@
 
   test('access root file', () {
     schedule(() {
-
       var handler = getHandler(d.defaultRoot);
 
       return makeRequest(handler, '/root.txt').then((response) {
         expect(response.statusCode, HttpStatus.OK);
+        expect(response.headers[HttpHeaders.CONTENT_LENGTH], 8);
         expect(response.readAsString(), completion('root txt'));
       });
     });
   });
 
+  test('file not found', () {
+    schedule(() {
+      var handler = getHandler(d.defaultRoot);
+
+      return makeRequest(handler, '/not_here.txt').then((response) {
+        expect(response.statusCode, HttpStatus.NOT_FOUND);
+      });
+    });
+  });
+
   // root file success, fail
   // pathed file success, fail