Files
2026-test-labor-02/bash/demo_gzip_problem.sh
2026-06-22 22:38:29 +03:00

90 lines
4.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ==============================================================================
# Демонстрация проблемы с HTTP-сжатием при замере скорости
# ==============================================================================
# Этот скрипт показывает, как gzip-сжатие может исказить результаты измерения
# скорости интернет-соединения
# ==============================================================================
echo "=============================================="
echo "Демонстрация проблемы с gzip-сжатием"
echo "=============================================="
echo ""
# URL для тестирования (любой сервер, который поддерживает gzip)
# Обычно это текстовые файлы, HTML, JSON - они хорошо сжимаются
TEST_URL="https://www.wikipedia.org/"
echo "Тестируем URL: $TEST_URL"
echo ""
# Тест 1: БЕЗ отключения сжатия (по умолчанию curl запрашивает gzip)
echo "1. Запрос БЕЗ отключения gzip (curl по умолчанию):"
echo " curl -s -o /dev/null -w '...' $TEST_URL"
echo ""
result_with_gzip=$(curl -s -o /dev/null -w "Время: %{time_total}s, Размер: %{size_download} байт" "$TEST_URL" 2>&1)
echo " Результат: $result_with_gzip"
# Извлекаем размер
size_with_gzip=$(echo "$result_with_gzip" | grep -o 'Размер: [0-9]*' | awk '{print $2}')
echo ""
# Тест 2: С отключением сжатия (как в нашем скрипте)
echo "2. Запрос С отключением gzip (Accept-Encoding: identity):"
echo " curl -H 'Accept-Encoding: identity' -s -o /dev/null -w '...' $TEST_URL"
echo ""
result_without_gzip=$(curl -H "Accept-Encoding: identity" -s -o /dev/null -w "Время: %{time_total}s, Размер: %{size_download} байт" "$TEST_URL" 2>&1)
echo " Результат: $result_without_gzip"
# Извлекаем размер
size_without_gzip=$(echo "$result_without_gzip" | grep -o 'Размер: [0-9]*' | awk '{print $2}')
echo ""
echo "=============================================="
echo "Сравнение:"
echo "=============================================="
if [ -n "$size_with_gzip" ] && [ -n "$size_without_gzip" ] && [ "$size_with_gzip" -gt 0 ]; then
# Вычисляем разницу
diff=$((size_without_gzip - size_with_gzip))
# Вычисляем коэффициент сжатия
if [ "$size_without_gzip" -gt 0 ]; then
ratio=$(echo "scale=2; $size_without_gzip / $size_with_gzip" | bc)
else
ratio="?"
fi
echo "БЕЗ отключения gzip: $size_with_gzip байт"
echo "С отключением gzip: $size_without_gzip байт"
echo "Разница: $diff байт"
echo "Коэффициент сжатия: ${ratio}x"
echo ""
if (( $(echo "$ratio > 1.5" | bc -l) )); then
echo "⚠️ ВНИМАНИЕ! Сжатие значительно уменьшило размер данных!"
echo " Если бы мы замеряли скорость без отключения gzip,"
echo " результат был бы завышен примерно в ${ratio} раз!"
echo ""
echo " Пример: реальная скорость 10 МБ/с,"
echo " но curl показал бы $(echo "scale=1; 10 * $ratio" | bc) МБ/с"
else
echo " Для этого URL сжатие минимально или отсутствует"
fi
else
echo "Не удалось получить корректные данные для сравнения"
fi
echo ""
echo "=============================================="
echo "Вывод:"
echo "=============================================="
echo "Наш скрипт speed_test.sh использует"
echo " -H 'Accept-Encoding: identity'"
echo "чтобы гарантировать точные измерения"
echo "реальной скорости интернет-соединения!"
echo "=============================================="