Loading documentation...
Loading documentation...
Loading documentation...
Sets HTTP cache headers (Cache-Control, Expires, Vary) for responses.
// Simple cache with max-age
s.Use(middleware.Cache(3600)) // 1 hour
// Public cache
s.Use(middleware.CachePublic(3600))
// Private cache
s.Use(middleware.CachePrivate(3600))
// Immutable content
s.Use(middleware.CacheImmutable(86400)) // 1 day
// Disable caching
s.Use(middleware.NoCache())s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600, // 1 hour
SMaxAge: 1800, // 30 minutes for shared caches
Public: true,
MustRevalidate: true,
Immutable: false,
StaleWhileRevalidate: 60,
StaleIfError: 300,
VaryHeaders: []string{"Accept-Encoding", "Accept-Language"},
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated requests
return r.Header.Get("Authorization") != ""
},
}))// Public: can be cached by any cache
s.Use(middleware.CachePublic(3600))
// Private: only for single user
s.Use(middleware.CachePrivate(3600))// Cache for 1 hour
s.Use(middleware.Cache(3600))
// Cache for 1 day
s.Use(middleware.Cache(86400))// Disable caching
s.Use(middleware.NoCache())This sets: Cache-Control: no-cache, no-store, must-revalidate
For content that never changes:
s.Use(middleware.CacheImmutable(86400 * 365)) // 1 yearSets: Cache-Control: public, max-age=31536000, immutable
Serve stale content while revalidating:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleWhileRevalidate: 60, // Serve stale for 60 seconds while revalidating
}))Serve stale content if there's an error:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleIfError: 300, // Serve stale for 5 minutes if error
}))Specify headers that affect caching:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
VaryHeaders: []string{
"Accept-Encoding",
"Accept-Language",
"User-Agent",
},
}))Set cache headers directly:
// Set Cache-Control header directly
middleware.SetCacheControl(w, "public, max-age=3600")
// Set Expires header
middleware.SetExpires(w, time.Now().Add(time.Hour))
// Set Last-Modified header
middleware.SetLastModified(w, time.Now())Skip cache headers for specific requests:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated or dynamic requests
return r.Header.Get("Authorization") != "" ||
r.URL.Path == "/api/dynamic"
},
}))// Cache static assets for 1 year
s.Static("/assets/", "./public")
s.Group("/assets", middleware.CacheImmutable(86400 * 365))// Short cache for API responses
api := s.Group("/api", middleware.Cache(300)) // 5 minutes// Private cache for user content
s.Group("/user", middleware.CachePrivate(3600))s := helix.New()
// Global: no cache by default
s.Use(middleware.NoCache())
// Public API: 5 minute cache
api := s.Group("/api/public", middleware.CachePublic(300))
// Static assets: 1 year cache
s.Group("/static", middleware.CacheImmutable(86400 * 365))
// User content: private cache
s.Group("/user", middleware.CachePrivate(3600))public for cacheable contentprivate for user-specific contentimmutable for versioned static assetsno-cache or no-store for dynamic contentmax-age based on content volatilityVary header when content varies by headersSets HTTP cache headers (Cache-Control, Expires, Vary) for responses.
// Simple cache with max-age
s.Use(middleware.Cache(3600)) // 1 hour
// Public cache
s.Use(middleware.CachePublic(3600))
// Private cache
s.Use(middleware.CachePrivate(3600))
// Immutable content
s.Use(middleware.CacheImmutable(86400)) // 1 day
// Disable caching
s.Use(middleware.NoCache())s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600, // 1 hour
SMaxAge: 1800, // 30 minutes for shared caches
Public: true,
MustRevalidate: true,
Immutable: false,
StaleWhileRevalidate: 60,
StaleIfError: 300,
VaryHeaders: []string{"Accept-Encoding", "Accept-Language"},
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated requests
return r.Header.Get("Authorization") != ""
},
}))// Public: can be cached by any cache
s.Use(middleware.CachePublic(3600))
// Private: only for single user
s.Use(middleware.CachePrivate(3600))// Cache for 1 hour
s.Use(middleware.Cache(3600))
// Cache for 1 day
s.Use(middleware.Cache(86400))// Disable caching
s.Use(middleware.NoCache())This sets: Cache-Control: no-cache, no-store, must-revalidate
For content that never changes:
s.Use(middleware.CacheImmutable(86400 * 365)) // 1 yearSets: Cache-Control: public, max-age=31536000, immutable
Serve stale content while revalidating:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleWhileRevalidate: 60, // Serve stale for 60 seconds while revalidating
}))Serve stale content if there's an error:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleIfError: 300, // Serve stale for 5 minutes if error
}))Specify headers that affect caching:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
VaryHeaders: []string{
"Accept-Encoding",
"Accept-Language",
"User-Agent",
},
}))Set cache headers directly:
// Set Cache-Control header directly
middleware.SetCacheControl(w, "public, max-age=3600")
// Set Expires header
middleware.SetExpires(w, time.Now().Add(time.Hour))
// Set Last-Modified header
middleware.SetLastModified(w, time.Now())Skip cache headers for specific requests:
s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated or dynamic requests
return r.Header.Get("Authorization") != "" ||
r.URL.Path == "/api/dynamic"
},
}))// Cache static assets for 1 year
s.Static("/assets/", "./public")
s.Group("/assets", middleware.CacheImmutable(86400 * 365))// Short cache for API responses
api := s.Group("/api", middleware.Cache(300)) // 5 minutes// Private cache for user content
s.Group("/user", middleware.CachePrivate(3600))s := helix.New()
// Global: no cache by default
s.Use(middleware.NoCache())
// Public API: 5 minute cache
api := s.Group("/api/public", middleware.CachePublic(300))
// Static assets: 1 year cache
s.Group("/static", middleware.CacheImmutable(86400 * 365))
// User content: private cache
s.Group("/user", middleware.CachePrivate(3600))public for cacheable contentprivate for user-specific contentimmutable for versioned static assetsno-cache or no-store for dynamic contentmax-age based on content volatilityVary header when content varies by headers// Simple cache with max-age
s.Use(middleware.Cache(3600)) // 1 hour
// Public cache
s.Use(middleware.CachePublic(3600))
// Private cache
s.Use(middleware.CachePrivate(3600))
// Immutable content
s.Use(middleware.CacheImmutable(86400)) // 1 day
// Disable caching
s.Use(middleware.NoCache())s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600, // 1 hour
SMaxAge: 1800, // 30 minutes for shared caches
Public: true,
MustRevalidate: true,
Immutable: false,
StaleWhileRevalidate: 60,
StaleIfError: 300,
VaryHeaders: []string{"Accept-Encoding", "Accept-Language"},
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated requests
return r.Header.Get("Authorization") != ""
},
}))// Public: can be cached by any cache
s.Use(middleware.CachePublic(3600))
// Private: only for single user
s.Use(middleware.CachePrivate(3600))// Cache for 1 hour
s.Use(middleware.Cache(3600))
// Cache for 1 day
s.Use(middleware.Cache(86400))// Disable caching
s.Use(middleware.NoCache())s.Use(middleware.CacheImmutable(86400 * 365)) // 1 years.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleWhileRevalidate: 60, // Serve stale for 60 seconds while revalidating
}))s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleIfError: 300, // Serve stale for 5 minutes if error
}))s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
VaryHeaders: []string{
"Accept-Encoding",
"Accept-Language",
"User-Agent",
},
}))// Set Cache-Control header directly
middleware.SetCacheControl(w, "public, max-age=3600")
// Set Expires header
middleware.SetExpires(w, time.Now().Add(time.Hour))
// Set Last-Modified header
middleware.SetLastModified(w, time.Now())s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated or dynamic requests
return r.Header.Get("Authorization") != "" ||
r.URL.Path == "/api/dynamic"
},
}))// Cache static assets for 1 year
s.Static("/assets/", "./public")
s.Group("/assets", middleware.CacheImmutable(86400 * 365))// Short cache for API responses
api := s.Group("/api", middleware.Cache(300)) // 5 minutes// Private cache for user content
s.Group("/user", middleware.CachePrivate(3600))s := helix.New()
// Global: no cache by default
s.Use(middleware.NoCache())
// Public API: 5 minute cache
api := s.Group("/api/public", middleware.CachePublic(300))
// Static assets: 1 year cache
s.Group("/static", middleware.CacheImmutable(86400 * 365))
// User content: private cache
s.Group("/user", middleware.CachePrivate(3600))// Simple cache with max-age
s.Use(middleware.Cache(3600)) // 1 hour
// Public cache
s.Use(middleware.CachePublic(3600))
// Private cache
s.Use(middleware.CachePrivate(3600))
// Immutable content
s.Use(middleware.CacheImmutable(86400)) // 1 day
// Disable caching
s.Use(middleware.NoCache())s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600, // 1 hour
SMaxAge: 1800, // 30 minutes for shared caches
Public: true,
MustRevalidate: true,
Immutable: false,
StaleWhileRevalidate: 60,
StaleIfError: 300,
VaryHeaders: []string{"Accept-Encoding", "Accept-Language"},
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated requests
return r.Header.Get("Authorization") != ""
},
}))// Public: can be cached by any cache
s.Use(middleware.CachePublic(3600))
// Private: only for single user
s.Use(middleware.CachePrivate(3600))// Cache for 1 hour
s.Use(middleware.Cache(3600))
// Cache for 1 day
s.Use(middleware.Cache(86400))// Disable caching
s.Use(middleware.NoCache())s.Use(middleware.CacheImmutable(86400 * 365)) // 1 years.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleWhileRevalidate: 60, // Serve stale for 60 seconds while revalidating
}))s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
StaleIfError: 300, // Serve stale for 5 minutes if error
}))s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
VaryHeaders: []string{
"Accept-Encoding",
"Accept-Language",
"User-Agent",
},
}))// Set Cache-Control header directly
middleware.SetCacheControl(w, "public, max-age=3600")
// Set Expires header
middleware.SetExpires(w, time.Now().Add(time.Hour))
// Set Last-Modified header
middleware.SetLastModified(w, time.Now())s.Use(middleware.CacheWithConfig(middleware.CacheConfig{
MaxAge: 3600,
SkipFunc: func(r *http.Request) bool {
// Don't cache authenticated or dynamic requests
return r.Header.Get("Authorization") != "" ||
r.URL.Path == "/api/dynamic"
},
}))// Cache static assets for 1 year
s.Static("/assets/", "./public")
s.Group("/assets", middleware.CacheImmutable(86400 * 365))// Short cache for API responses
api := s.Group("/api", middleware.Cache(300)) // 5 minutes// Private cache for user content
s.Group("/user", middleware.CachePrivate(3600))s := helix.New()
// Global: no cache by default
s.Use(middleware.NoCache())
// Public API: 5 minute cache
api := s.Group("/api/public", middleware.CachePublic(300))
// Static assets: 1 year cache
s.Group("/static", middleware.CacheImmutable(86400 * 365))
// User content: private cache
s.Group("/user", middleware.CachePrivate(3600))