You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bh...@apache.org on 2014/09/24 20:22:35 UTC

git commit: CB-7572 Serve - respond with 304 when resource not modified

Repository: cordova-lib
Updated Branches:
  refs/heads/master 2aace451a -> 3ead61c5e


CB-7572 Serve - respond with 304 when resource not modified


Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/3ead61c5
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/3ead61c5
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/3ead61c5

Branch: refs/heads/master
Commit: 3ead61c5e3ed9a78f8951a6d60a524a5e85649a9
Parents: 2aace45
Author: Bryan Higgins <bh...@blackberry.com>
Authored: Fri Sep 19 14:02:12 2014 -0400
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Wed Sep 24 14:21:46 2014 -0400

----------------------------------------------------------------------
 cordova-lib/package.json         |  1 +
 cordova-lib/src/cordova/serve.js | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3ead61c5/cordova-lib/package.json
----------------------------------------------------------------------
diff --git a/cordova-lib/package.json b/cordova-lib/package.json
index 72d376f..6b4ebfc 100644
--- a/cordova-lib/package.json
+++ b/cordova-lib/package.json
@@ -36,6 +36,7 @@
     "underscore": "1.4.4",
     "xcode": "0.6.7",
     "cordova-js": "3.6.4",
+    "d8": "0.4.4",
     "unorm": ">=1.3"
   },
   "devDependencies": {

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3ead61c5/cordova-lib/src/cordova/serve.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/serve.js b/cordova-lib/src/cordova/serve.js
index 4d65421..26c114b 100644
--- a/cordova-lib/src/cordova/serve.js
+++ b/cordova-lib/src/cordova/serve.js
@@ -35,6 +35,11 @@ var cordova_util = require('./util'),
     mime = require('mime'),
     zlib = require('zlib');
 
+//extends Date object
+//used only for RFC 2822 formatting
+require('d8');
+require('d8/locale/en-US');
+
 function launchServer(projectRoot, port) {
     var server = http.createServer(
     function(request, response) {
@@ -52,6 +57,17 @@ function launchServer(projectRoot, port) {
             response.end();
             return '';
         }
+        function do304() {
+            console.log('304 ' + request.url);
+            response.writeHead(304, {'Content-Type': 'text/plain'});
+            response.end();
+            return '';
+        }
+        function isFileChanged(path) {
+            var mtime = fs.statSync(path).mtime,
+                itime = request.headers['if-modified-since'];
+            return !itime || new Date(mtime) > new Date(itime);
+        }
         function doRoot() {
             var p;
             response.writeHead(200, {'Content-Type': 'text/html'});
@@ -148,6 +164,8 @@ function launchServer(projectRoot, port) {
                 }
                 response.write('</ul>');
                 response.end();
+            } else if (!isFileChanged(filePath)) {
+               do304();
             } else {
                 var mimeType = mime.lookup(filePath);
                 var respHeaders = {
@@ -163,6 +181,8 @@ function launchServer(projectRoot, port) {
                     respHeaders['content-encoding'] = 'deflate';
                     readStream = readStream.pipe(zlib.createDeflate());
                 }
+
+                respHeaders['Last-Modified'] = new Date(fs.statSync(filePath).mtime).format('r');
                 console.log('200 ' + request.url);
                 response.writeHead(200, respHeaders);
                 readStream.pipe(response);