Home / File/ compress.go — fiber Source File

compress.go — fiber Source File

Architecture documentation for compress.go, a go file in the fiber codebase. 1 imports, 0 dependents.

File go FiberCore Adapters 1 imports 4 functions 1 classes

Entity Profile

Dependency Diagram

graph LR
  dbda7960_96fc_de94_3b5b_209ae85b21e1["compress.go"]
  4809913a_4bc9_08d2_f6bd_d40ce1eb7266["strings"]
  dbda7960_96fc_de94_3b5b_209ae85b21e1 --> 4809913a_4bc9_08d2_f6bd_d40ce1eb7266
  style dbda7960_96fc_de94_3b5b_209ae85b21e1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

package compress

import (
	"strings"

	"github.com/gofiber/fiber/v3"
	"github.com/gofiber/fiber/v3/middleware/etag"
	"github.com/gofiber/utils/v2"
	"github.com/valyala/fasthttp"
)

func hasToken(header, token string) bool {
	for part := range strings.SplitSeq(header, ",") {
		if utils.EqualFold(utils.TrimSpace(part), token) {
			return true
		}
	}
	return false
}

func shouldSkip(c fiber.Ctx) bool {
	if c.Method() == fiber.MethodHead {
		return true
	}

	status := c.Response().StatusCode()
	if status < 200 ||
		status == fiber.StatusNoContent ||
		status == fiber.StatusResetContent ||
		status == fiber.StatusNotModified ||
		status == fiber.StatusPartialContent ||
		len(c.Response().Body()) == 0 ||
		c.Get(fiber.HeaderRange) != "" ||
		hasToken(c.Get(fiber.HeaderCacheControl), "no-transform") ||
		hasToken(c.GetRespHeader(fiber.HeaderCacheControl), "no-transform") {
		return true
	}
	return false
}

func appendVaryAcceptEncoding(c fiber.Ctx) {
	vary := c.GetRespHeader(fiber.HeaderVary)
	if vary == "" {
		c.Set(fiber.HeaderVary, fiber.HeaderAcceptEncoding)
		return
	}
	if hasToken(vary, "*") || hasToken(vary, fiber.HeaderAcceptEncoding) {
		return
	}
	c.Set(fiber.HeaderVary, vary+", "+fiber.HeaderAcceptEncoding)
}

// New creates a new middleware handler
func New(config ...Config) fiber.Handler {
	// Set default config
	cfg := configDefault(config...)

	// Setup request handlers
	var (
		fctx       = func(_ *fasthttp.RequestCtx) {}
// ... (66 more lines)

Domain

Subdomains

Classes

Dependencies

  • strings

Frequently Asked Questions

What does compress.go do?
compress.go is a source file in the fiber codebase, written in go. It belongs to the FiberCore domain, Adapters subdomain.
What functions are defined in compress.go?
compress.go defines 4 function(s): New, appendVaryAcceptEncoding, hasToken, shouldSkip.
What does compress.go depend on?
compress.go imports 1 module(s): strings.
Where is compress.go in the architecture?
compress.go is located at middleware/compress/compress.go (domain: FiberCore, subdomain: Adapters, directory: middleware/compress).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free