func Compress(req zerver.Request, resp zerver.Response, chain zerver.FilterChain) { encoding := req.AcceptEncodings() if strings.Contains(encoding, zerver.ENCODING_GZIP) { resp.SetContentEncoding(zerver.ENCODING_GZIP) resp.Wrap(gzipWrapper) } else if strings.Contains(encoding, zerver.ENCODING_DEFLATE) { resp.SetContentEncoding(zerver.ENCODING_DEFLATE) resp.Wrap(flateWrapper) } else { chain(req, resp) return } chain(req, resp) resp.RemoveHeader("Content-Length") }
func Compress(req zerver.Request, resp zerver.Response, chain zerver.FilterChain) { encoding := req.GetHeader(zerver.HEADER_ACCEPTENCODING) respHeaders := resp.Headers() if strings.Contains(encoding, zerver.ENCODING_GZIP) { respHeaders.Set(zerver.HEADER_CONTENTENCODING, zerver.ENCODING_GZIP) resp.Wrap(gzipWrapper) } else if strings.Contains(encoding, zerver.ENCODING_DEFLATE) { respHeaders.Set(zerver.HEADER_CONTENTENCODING, zerver.ENCODING_DEFLATE) resp.Wrap(flateWrapper) } else { chain(req, resp) return } chain(req, resp) respHeaders.Del(zerver.HEADER_CONTENTLENGTH) }
func (j *JSONP) Filter(req zerver.Request, resp zerver.Response, chain zerver.FilterChain) { if req.ReqMethod() != zerver.METHOD_GET { chain(req, resp) return } callback := req.Vars().QueryVar(j.CallbackVar) if callback == "" { chain(req, resp) return } buffer := bytes.NewBuffer(make([]byte, 0, 256)) bw := wrap.BuffRespWriter{ // to avoid write header 200 first when write callback name Buffer: buffer, } resp.Wrap(func(w http.ResponseWriter, shouldClose bool) (http.ResponseWriter, bool) { bw.ResponseWriter = w bw.ShouldClose = shouldClose return &bw, shouldClose }) chain(req, resp) bw.Buffer = nil _, err := io2.WriteString(resp, callback) if err == nil { _, err = io2.WriteString(resp, "(") if err == nil { _, err = resp.Write(buffer.Bytes()) if err == nil { _, err = io2.WriteString(resp, ")") } } } if err != nil { j.log.Warn(log.M{"msg": "write jsonp response failed", "err": err.Error()}) } }