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 log
  • recover — перехват паник
  • cors — политика CORS
  • compress — gzip/br/deflate сжатие
  • cache — кэширование ответов
  • limiter — ограничение частоты запросов
  • requestid — добавление X-Request-ID
  • basicauth — HTTP Basic Auth
  • keyauth — аутентификация по API-ключу
  • jwt — JWT-аутентификация (через отдельный пакет gofiber/jwt)
  • csrf — защита от CSRF-атак
  • helmet — security заголовки (X-Frame-Options, CSP и др.)
  • etag — генерация ETag для кэширования
  • proxy — проксирование запросов
  • rewrite — перезапись URL
  • redirect — редиректы
  • 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 и опирается на реальные контракты официальной документации.

Sources

Related topics