diff options
| author | Anmol Sethi <hi@nhooyr.io> | 2017-10-18 21:27:48 -0400 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2019-10-14 21:10:00 +0000 |
| commit | 9f95a3097710fa4aa01910218454d23fa880f736 (patch) | |
| tree | 91a8dc9f621539b69696084e5f25884829081ca6 /src/net/http/fs.go | |
| parent | 19532d04bfe4bfb2e4a2de239ac13f31b77080fc (diff) | |
| download | go-9f95a3097710fa4aa01910218454d23fa880f736.tar.xz | |
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 <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/net/http/fs.go')
| -rw-r--r-- | src/net/http/fs.go | 26 |
1 files 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 |
