Created
December 5, 2012 02:06
-
-
Save caridy/4211460 to your computer and use it in GitHub Desktop.
headers modified tests for static handling
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function modified(req, headers) { | |
var modifiedSince = req.headers['if-modified-since'], | |
lastModified = headers['Last-Modified'], | |
noneMatch = req.headers['if-none-match'], | |
etag = headers.ETag, | |
etagModified = true, | |
dateModified = true; | |
// Check If-None-Match | |
if (noneMatch && etag && noneMatch === etag) { | |
etagModified = false; | |
} | |
// Check If-Modified-Since | |
if (modifiedSince && lastModified) { | |
modifiedSince = new Date(modifiedSince); | |
lastModified = new Date(lastModified); | |
// Ignore invalid dates | |
if (!isNaN(modifiedSince.getTime())) { | |
if (lastModified <= modifiedSince) { | |
dateModified = false; | |
} | |
} | |
} | |
return etagModified || dateModified; | |
} | |
// testing modified data | |
// 1. same | |
console.log(modified({ | |
headers: { | |
'if-modified-since': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'if-none-match': 123 | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 123 | |
})); | |
// 2. req is older | |
console.log(modified({ | |
headers: { | |
'if-modified-since': 'Fri, 30 Nov 2012 21:01:52 GMT', | |
'if-none-match': 123 | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 123 | |
})); | |
// 3. req is newer | |
console.log(modified({ | |
headers: { | |
'if-modified-since': 'Fri, 30 Nov 2012 21:09:52 GMT', | |
'if-none-match': 123 | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 123 | |
})); | |
// 4. invalid | |
console.log(modified({ | |
headers: { | |
'if-none-match': 123 | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 123 | |
})); | |
// testing etag data | |
// 1. same (yes duplicated) | |
console.log(modified({ | |
headers: { | |
'if-modified-since': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'if-none-match': 123 | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 123 | |
})); | |
// 1. different | |
console.log(modified({ | |
headers: { | |
'if-modified-since': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'if-none-match': 123 | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 321 | |
})); | |
// 1. invalid | |
console.log(modified({ | |
headers: { | |
'if-modified-since': 'Fri, 30 Nov 2012 21:07:52 GMT' | |
} | |
}, { | |
'Last-Modified': 'Fri, 30 Nov 2012 21:07:52 GMT', | |
'ETag': 321 | |
})); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment