


26 октября вышла fasthttp 1.77.0, HTTP-библиотека для Go. Обновление ограничивает доступ к статическим файлам пределами настроенных каталогов и исправляет несколько ошибок соединений. На Mentoring.digital разбираем изменения, которые могут повлиять на существующий сервер.
Стандартная файловая система FS теперь отклоняет ссылки, выходящие за Root или CompressRoot. Абсолютные символические ссылки также отклоняются, даже если ведут внутрь нужного каталога. Относительные ссылки, остающиеся внутри корня, продолжают работать.
Ограничение реализовано для файловой системы операционной системы; собственные реализации FS.FS этим изменением не затрагиваются. Параметр AllowSymlinksOutsideRoot возвращает прежнее поведение, но включать его автоматически ради устранения ошибки не стоит: сначала нужно понять, зачем приложению нужен внешний путь.
Отдельно исправлена очистка устаревшего сжатого содержимого при работе с собственной файловой системой. Раньше имя такого файла могло попасть в удаление на обычном диске относительно рабочего каталога процесса. Теперь устаревшее содержимое пересоздаётся в памяти без удаления дискового файла.
При одновременном использовании KeepHijackedConns и ReduceMemoryUsage читатель переданного соединения теперь отделяется от контекста запроса до вызова обработчика. Исправление предотвращает зависимость последующих чтений от повторно использованного контекста.
Новый необязательный NewBoundedStreamReader ограничивает буферизацию копируемых данных и замедляет производителя, если потребитель не успевает читать. Указанные разработчиками пределы относятся к конкретным буферам передачи, а не ко всей памяти сервера. Прежние NewStreamReader и SetBodyStreamWriter автоматически на новый режим не переходят.
Новая версия не является поводом переписывать работающий сервер с net/http без измерений. Выбор библиотеки и проверку владения буферами можно разобрать с ментором по Go, опираясь на небольшой воспроизводимый пример и требования приложения.