From 9f95a3097710fa4aa01910218454d23fa880f736 Mon Sep 17 00:00:00 2001 From: Anmol Sethi Date: Wed, 18 Oct 2017 21:27:48 -0400 Subject: [PATCH] net/http: clean up checkIfModifiedSince and checkIfUnmodifiedSince The comment in both functions referred to the wrong header and I made the checks easier to read. Change-Id: Ifb46729cee631a3305f557863818e3487b8eed71 Reviewed-on: https://go-review.googlesource.com/c/go/+/71753 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/net/http/fs.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/net/http/fs.go b/src/net/http/fs.go index 80c391d1c3..d2144857e8 100644 --- a/src/net/http/fs.go +++ b/src/net/http/fs.go @@ -384,15 +384,18 @@ func checkIfUnmodifiedSince(r *Request, modtime time.Time) condResult { if ius == "" || isZeroTime(modtime) { return condNone } - if t, err := ParseTime(ius); err == nil { - // The Date-Modified header truncates sub-second precision, so - // use mtime < t+1s instead of mtime <= t to check for unmodified. - if modtime.Before(t.Add(1 * time.Second)) { - return condTrue - } - return condFalse + t, err := ParseTime(ius) + if err != nil { + return condNone } - return condNone + + // The Last-Modified header truncates sub-second precision so + // the modtime needs to be truncated too. + modtime = modtime.Truncate(time.Second) + if modtime.Before(t) || modtime.Equal(t) { + return condTrue + } + return condFalse } func checkIfNoneMatch(w ResponseWriter, r *Request) condResult { @@ -436,9 +439,10 @@ func checkIfModifiedSince(r *Request, modtime time.Time) condResult { if err != nil { return condNone } - // The Date-Modified header truncates sub-second precision, so - // use mtime < t+1s instead of mtime <= t to check for unmodified. - if modtime.Before(t.Add(1 * time.Second)) { + // The Last-Modified header truncates sub-second precision so + // the modtime needs to be truncated too. + modtime = modtime.Truncate(time.Second) + if modtime.Before(t) || modtime.Equal(t) { return condFalse } return condTrue -- 2.50.0