MCPcopy Create free account
hub / github.com/cortexproject/cortex / newCompressedResponseWriter

Function newCompressedResponseWriter

pkg/api/queryapi/compression.go:55–77  ·  view source on GitHub ↗

Constructs a new compressedResponseWriter based on client request headers.

(writer http.ResponseWriter, req *http.Request)

Source from the content-addressed store, hash-verified

53
54// Constructs a new compressedResponseWriter based on client request headers.
55func newCompressedResponseWriter(writer http.ResponseWriter, req *http.Request) *compressedResponseWriter {
56 encodings := strings.SplitSeq(req.Header.Get(acceptEncodingHeader), ",")
57 for encoding := range encodings {
58 switch strings.TrimSpace(encoding) {
59 case zstdEncoding:
60 encoder, err := zstd.NewWriter(writer)
61 if err == nil {
62 writer.Header().Set(contentEncodingHeader, zstdEncoding)
63 return &compressedResponseWriter{ResponseWriter: writer, writer: encoder}
64 }
65 case snappyEncoding:
66 writer.Header().Set(contentEncodingHeader, snappyEncoding)
67 return &compressedResponseWriter{ResponseWriter: writer, writer: snappy.NewBufferedWriter(writer)}
68 case gzipEncoding:
69 writer.Header().Set(contentEncodingHeader, gzipEncoding)
70 return &compressedResponseWriter{ResponseWriter: writer, writer: gzip.NewWriter(writer)}
71 case deflateEncoding:
72 writer.Header().Set(contentEncodingHeader, deflateEncoding)
73 return &compressedResponseWriter{ResponseWriter: writer, writer: zlib.NewWriter(writer)}
74 }
75 }
76 return &compressedResponseWriter{ResponseWriter: writer, writer: writer}
77}
78
79// CompressionHandler is a wrapper around http.Handler which adds suitable
80// response compression based on the client's Accept-Encoding headers.

Calls 3

GetMethod · 0.65
SetMethod · 0.65
HeaderMethod · 0.45