Сервис перестаёт отвечать, когда клиенты открывают соединения и медленно шлют заголовки
srv := &http.Server{
Addr: ":8080",
Handler: router,
}
log.Fatal(srv.ListenAndServe())
Во время атаки тысячи клиентов открывают соединения и отправляют заголовки по байту в минуту. Сервис исчерпывает дескрипторы и перестаёт принимать обычные запросы. Что добавить?
- Таймауты сервера: ReadHeaderTimeout, ReadTimeout, IdleTimeout
- Увеличить GOMAXPROCS
- Запускать каждый запрос в отдельной горутине
- Перейти с HTTP/1.1 на HTTP/2 без других изменений
