FiberJuniorTechnical
Какой встроенный middleware предоставляет Fiber из коробки?
Fiber включает более 20 встроенных middleware в подпакетах: logger, recover, cors, compress, limiter, cache, requestid, csrf, helmet, session, basicauth, pprof и другие. Все подключаются через app.Use().
Встроенный middleware в Fiber
Fiber поставляется с богатым набором middleware в пакете github.com/gofiber/fiber/v2/middleware. Каждый middleware — отдельный подпакет, подключаемый независимо. Все они соответствуют интерфейсу fiber.Handler и устанавливаются через app.Use().
Наиболее используемые middleware
Logger — логирование запросов
import "github.com/gofiber/fiber/v2/middleware/logger"
app.Use(logger.New(logger.Config{
Format: "${time} | ${status} | ${latency} | ${ip} | ${method} | ${path}\n",
TimeFormat: "2006-01-02 15:04:05",
TimeZone: "Europe/Moscow",
}))
Recover — перехват паник
import "github.com/gofiber/fiber/v2/middleware/recover"
app.Use(recover.New(recover.Config{
EnableStackTrace: true, // логировать stack trace
}))
CORS — настройка политики CORS
import "github.com/gofiber/fiber/v2/middleware/cors"
app.Use(cors.New(cors.Config{
AllowOrigins: "https://example.com, https://app.example.com",
AllowMethods: "GET,POST,PUT,DELETE,OPTIONS",
AllowHeaders: "Origin, Content-Type, Authorization",
AllowCredentials: true,
MaxAge: 3600,
}))
RequestID — уникальный идентификатор запроса
import "github.com/gofiber/fiber/v2/middleware/requestid"
app.Use(requestid.New())
// Доступен через: c.Locals("requestid") или заголовок X-Request-ID
Compress — сжатие ответов
import "github.com/gofiber/fiber/v2/middleware/compress"
app.Use(compress.New(compress.Config{
Level: compress.LevelBestSpeed, // BestSpeed | BestCompression | DefaultCompression
}))
Limiter — rate limiting
import (
"time"
"github.com/gofiber/fiber/v2/middleware/limiter"
)
app.Use(limiter.New(limiter.Config{
Max: 100, // запросов
Expiration: 1 * time.Minute, // за период
KeyGenerator: func(c *fiber.Ctx) string {
return c.IP() // ключ — IP-адрес клиента
},
LimitReached: func(c *fiber.Ctx) error {
return c.Status(fiber.StatusTooManyRequests).JSON(fiber.Map{
"error": "too many requests",
})
},
}))
BasicAuth — базовая HTTP-аутентификация
import "github.com/gofiber/fiber/v2/middleware/basicauth"
app.Use(basicauth.New(basicauth.Config{
Users: map[string]string{
"admin": "supersecret",
},
}))
Cache — HTTP-кэширование ответов
import (
"time"
"github.com/gofiber/fiber/v2/middleware/cache"
)
app.Use(cache.New(cache.Config{
Expiration: 30 * time.Minute,
CacheControl: true,
}))
Полный список встроенных middleware
logger— HTTP access logrecover— перехват паникcors— политика CORScompress— gzip/br/deflate сжатиеcache— кэширование ответовlimiter— ограничение частоты запросовrequestid— добавление X-Request-IDbasicauth— HTTP Basic Authkeyauth— аутентификация по API-ключуjwt— JWT-аутентификация (через отдельный пакет gofiber/jwt)csrf— защита от CSRF-атакhelmet— security заголовки (X-Frame-Options, CSP и др.)etag— генерация ETag для кэшированияproxy— проксирование запросовrewrite— перезапись URLredirect— редиректыsession— управление сессиямиtimeout— тайм-аут обработчикаpprof— профилирование (эндпоинты /debug/pprof)monitor— встроенная страница мониторинга метрикfilesystem— раздача файлов из embed или кастомной FS
Подводные камни
- Порядок app.Use имеет значение:
recoverдолжен быть первым — иначе паника в logger или cors уронит сервер без перехвата. - cors и preflight: Если
AllowCredentials: true, нельзя ставитьAllowOrigins: "*"— браузер отклонит такой ответ. Нужно перечислять конкретные домены. - limiter хранит состояние в памяти: В multi-instance окружении счётчики не синхронизируются. Для распределённого rate limiting нужно подключить Redis-хранилище через
Storageв конфиге. - compress и streaming: Middleware compress буферизует ответ для сжатия, что ломает SSE (Server-Sent Events) и стриминговые ответы. Для таких маршрутов compress нужно отключать.
- cache и POST-запросы: По умолчанию кэшируются только GET-запросы. Не добавляйте cache перед маршрутами с мутирующими операциями без явной настройки
Methods. - helmet и CSP: Helmet устанавливает строгий Content-Security-Policy по умолчанию, что может сломать inline-скрипты и CDN-ресурсы во фронтенде.
Common mistakes
- Давать ответ про built-in middleware Fiber только на уровне определения, не показывая поведение в реальном приложении.
- Игнорировать границы ответственности вокруг темы «built-in middleware Fiber»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
- Не связывать built-in middleware Fiber с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.
What the interviewer is testing
- Точно объясняет, что именно делает built-in middleware Fiber и где это используется в Go-коде.
- Связывает built-in middleware Fiber с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
- Не изобретает API и опирается на реальные контракты официальной документации.