@@ -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
1718type 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