mirror of
https://github.com/ipfs/kubo.git
synced 2025-05-17 15:06:47 +08:00
Include the git blob id of the dir-index bundle in the ETag
While the content of raw files retrieved via the gateway should never change, the look and feel of the directory index can and will change between versions of go-ipfs. Incorporate the hash of assets/bindata.go into the ETag when appropriate
This commit is contained in:

committed by
Peter Rabbitson

parent
413ab315ba
commit
2d5f8b4ebe
@ -1,6 +1,8 @@
|
||||
//go:generate git submodule update --init ./dir-index-html
|
||||
//go:generate go run github.com/go-bindata/go-bindata/go-bindata -pkg=assets init-doc dir-index-html/dir-index.html dir-index-html/knownIcons.txt
|
||||
//go:generate gofmt -w bindata.go
|
||||
//go:generate sh -c "sed -i \"s/.*BindataVersionHash.*/BindataVersionHash=\\\"$(git hash-object bindata.go)\\\"/\" bindata_version_hash.go"
|
||||
//go:generate gofmt -w bindata_version_hash.go
|
||||
package assets
|
||||
|
||||
import (
|
||||
|
5
assets/bindata_version_hash.go
Normal file
5
assets/bindata_version_hash.go
Normal file
@ -0,0 +1,5 @@
|
||||
package assets
|
||||
|
||||
const (
|
||||
BindataVersionHash = "c1aa0601ac3eac2c50b296cf618a6747eeba8579"
|
||||
)
|
@ -19,6 +19,7 @@ import (
|
||||
"github.com/gabriel-vasile/mimetype"
|
||||
"github.com/ipfs/go-cid"
|
||||
files "github.com/ipfs/go-ipfs-files"
|
||||
assets "github.com/ipfs/go-ipfs/assets"
|
||||
dag "github.com/ipfs/go-merkledag"
|
||||
mfs "github.com/ipfs/go-mfs"
|
||||
path "github.com/ipfs/go-path"
|
||||
@ -222,16 +223,26 @@ func (i *gatewayHandler) getOrHeadHandler(w http.ResponseWriter, r *http.Request
|
||||
|
||||
defer dr.Close()
|
||||
|
||||
// Check etag send back to us
|
||||
etag := "\"" + resolvedPath.Cid().String() + "\""
|
||||
if r.Header.Get("If-None-Match") == etag || r.Header.Get("If-None-Match") == "W/"+etag {
|
||||
var responseEtag string
|
||||
|
||||
// we need to figure out whether this is a directory before doing most of the heavy lifting below
|
||||
_, ok := dr.(files.Directory)
|
||||
|
||||
if ok && assets.BindataVersionHash != "" {
|
||||
responseEtag = `"DirIndex-` + assets.BindataVersionHash + `_CID-` + resolvedPath.Cid().String() + `"`
|
||||
} else {
|
||||
responseEtag = `"` + resolvedPath.Cid().String() + `"`
|
||||
}
|
||||
|
||||
// Check etag sent back to us
|
||||
if r.Header.Get("If-None-Match") == responseEtag || r.Header.Get("If-None-Match") == `W/`+responseEtag {
|
||||
w.WriteHeader(http.StatusNotModified)
|
||||
return
|
||||
}
|
||||
|
||||
i.addUserHeaders(w) // ok, _now_ write user's headers.
|
||||
w.Header().Set("X-IPFS-Path", urlPath)
|
||||
w.Header().Set("Etag", etag)
|
||||
w.Header().Set("Etag", responseEtag)
|
||||
|
||||
// set these headers _after_ the error, for we may just not have it
|
||||
// and don't want the client to cache a 500 response...
|
||||
|
Reference in New Issue
Block a user