Skip to content

Commit fc9a882

Browse files
committed
test: support zstd
1 parent 8b9b1d6 commit fc9a882

File tree

2 files changed

+28
-33
lines changed

2 files changed

+28
-33
lines changed

.vscode/settings.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"cSpell.words": [
3+
"brotli",
4+
"fileint",
5+
"gzipped",
6+
"mware",
7+
"zsdecoder",
8+
"zsencoder",
9+
"zstd"
10+
]
11+
}

httpfileserver.go

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/andybalholm/brotli"
1313
"github.com/klauspost/compress/flate"
1414
"github.com/klauspost/compress/gzip"
15+
"github.com/klauspost/compress/zstd"
1516
)
1617

1718
type FileServer struct {
@@ -136,52 +137,23 @@ func (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
136137
// open from cache if its not disabled
137138
if !fs.optionDisableCache {
138139
switch Accept {
139-
case "gzip":
140+
case "gzip", "br", "zstd", "deflate":
140141
// load the gzipped cache version if available
141-
fileint, ok := fs.cache.Load(key + "gzip")
142+
fileint, ok := fs.cache.Load(key + Accept)
142143
if ok {
143144
file := fileint.(file)
144145
for k := range file.header {
145146
for _, v := range file.header[k] {
146147
w.Header().Set(k, v)
147148
}
148149
}
149-
w.Header().Set("Content-Encoding", "gzip")
150-
w.Write(file.bytes)
151-
return
152-
}
153-
case "br":
154-
// load the gzipped cache version if available
155-
fileint, ok := fs.cache.Load(key + "br")
156-
if ok {
157-
file := fileint.(file)
158-
for k := range file.header {
159-
for _, v := range file.header[k] {
160-
w.Header().Set(k, v)
161-
}
162-
}
163-
w.Header().Set("Content-Encoding", "br")
164-
w.Write(file.bytes)
165-
return
166-
}
167-
case "deflate":
168-
// load the deflate cache version if available
169-
fileint, ok := fs.cache.Load(key + "deflate")
170-
if ok {
171-
file := fileint.(file)
172-
for k := range file.header {
173-
for _, v := range file.header[k] {
174-
w.Header().Set(k, v)
175-
}
176-
}
177-
w.Header().Set("Content-Encoding", "deflate")
150+
w.Header().Set("Content-Encoding", Accept)
178151
w.Write(file.bytes)
179152
return
180153
}
181154
}
182-
183-
// try to load a regular version from the cache
184155
fileint, ok := fs.cache.Load(key)
156+
// try to load a regular version from the cache
185157
if ok {
186158
file := fileint.(file)
187159
for k := range file.header {
@@ -214,6 +186,15 @@ func (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
214186
w.Write(wb.Bytes())
215187
file.bytes = wb.Bytes()
216188
fs.cache.Store(key+"br", file)
189+
case "zstd":
190+
w.Header().Set("Content-Encoding", "zstd")
191+
var wb bytes.Buffer
192+
enc, _ := zstd.NewWriter(&wb)
193+
enc.Write(file.bytes)
194+
enc.Close()
195+
w.Write(wb.Bytes())
196+
file.bytes = wb.Bytes()
197+
fs.cache.Store(key+"br", file)
217198
case "deflate":
218199
w.Header().Set("Content-Encoding", "deflate")
219200
var wb bytes.Buffer
@@ -235,6 +216,9 @@ func (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
235216
case "gzip":
236217
wc = gzip.NewWriter(w)
237218
w.Header().Set("Content-Encoding", "gzip")
219+
case "zstd":
220+
wc, _ = zstd.NewWriter(w)
221+
w.Header().Set("Content-Encoding", "zstd")
238222
case "br":
239223
wc = brotli.NewWriter(w)
240224
w.Header().Set("Content-Encoding", "br")

0 commit comments

Comments
 (0)