> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CDN-скачивание изображений/видео медленное — что делать?

> APIYI размещает все сгенерированные изображения и видео в глобальном CDN Cloudflare R2. Это руководство поможет вам диагностировать медленную загрузку с определенных серверов.

## Быстрый ответ

Все изображения и видео, сгенерированные APIYI (Veo 3.1, Sora, Nano Banana и т. д.), размещаются в **глобальной CDN Cloudflare R2**, которая по замыслу обеспечивает высокую скорость по всему миру. Если загрузка на вашем сервере идет медленно, **почти всегда причина в сетевом маршруте между вашим сервером и edge Cloudflare**, а не в самой CDN — особенно для серверов в материковом Китае, обращающихся к зарубежным CDN, где пропускная способность через границу, маршрутизация у ISP и локальное разрешение DNS часто ухудшают производительность.

<Info>
  **Ключевой момент**

  URL ресурсов Cloudflare R2 обычно выглядят как `*.r2.cloudflarestorage.com` или как пользовательский домен, проксируемый через Cloudflare. Скорость загрузки зависит от того, насколько эффективно ваш сервер может подключиться к ближайшему edge-узлу Cloudflare.
</Info>

## Распространенные причины

<CardGroup cols={2}>
  <Card title="Трансграничная перегрузка" icon="network">
    Серверы в материковом Китае, обращающиеся к зарубежным CDN, часто сталкиваются с перегрузкой на международном канале в часы пик, что приводит к замедлению или тайм-аутам.
  </Card>

  <Card title="Неоптимальная маршрутизация ISP" icon="route">
    Некоторые облачные провайдеры маршрутизируют международный трафик через запад США или Европу, добавляя десятки миллисекунд ненужной задержки.
  </Card>

  <Card title="Плохое разрешение DNS" icon="globe">
    Локальный DNS может сопоставлять hostname Cloudflare с удаленным edge (например, запад США) вместо ближайшего узла APAC.
  </Card>

  <Card title="Ограничения firewall / security group" icon="shield">
    Некоторые серверы ограничивают исходящий трафик диапазонами зарубежных IP, портом 443 или определенными доменами CDN, ухудшая качество соединения.
  </Card>

  <Card title="HTTP/2 и повторное использование соединений" icon="plug">
    Клиенты без HTTP/2 или повторного использования соединений оплачивают затраты на TCP/TLS handshake для каждого файла.
  </Card>

  <Card title="Однопоточная загрузка" icon="gauge">
    Последовательные однопоточные загрузки не могут воспользоваться мультиплексированием CDN; пропускная способность остается низкой.
  </Card>
</CardGroup>

## Шаги по устранению неполадок

<Steps>
  <Step title="Это на одном сервере или везде?">
    Попробуйте скачать тот же URL CDN с ноутбука или другого сервера.

    * На ноутбуке быстро, на сервере медленно → **проблема с сетевым путем сервера**
    * Медленно везде → обратитесь в поддержку с конкретным URL
  </Step>

  <Step title="Проверьте базовую сеть до CDN">
    Используйте `ping`, `mtr`, `traceroute`, чтобы проверить задержку и потери пакетов:

    ```bash theme={null}
    ping <cdn-host>
    mtr -rwc 30 <cdn-host>
    traceroute <cdn-host>
    ```

    Потери пакетов, задержка выше 200ms или маршруты, уводящие трафик за границу, указывают на проблемы на уровне канала связи.
  </Step>

  <Step title="Измерьте фактическую скорость загрузки">
    Используйте `curl`, чтобы проверить время и пропускную способность:

    ```bash theme={null}
    curl -o /dev/null -w "dns:%{time_namelookup} connect:%{time_connect} \
    ttfb:%{time_starttransfer} total:%{time_total} speed:%{speed_download}\n" \
    "<CDN URL>"
    ```

    Обратите внимание на:

    * `time_namelookup`: время разрешения DNS
    * `time_connect`: время установки TCP-соединения
    * `time_starttransfer`: время до первого байта (TTFB)
    * `speed_download`: средняя пропускная способность (bytes/sec)
  </Step>

  <Step title="Проверьте разрешение DNS">
    ```bash theme={null}
    dig <cdn-host>
    nslookup <cdn-host>
    ```

    Проверьте, находится ли разрешенный IP-адрес географически рядом с вами. Пользователи APAC должны получать APAC edges; если нет, переключитесь на общедоступный DNS.
  </Step>

  <Step title="Проверьте ограничения на стороне сервера">
    Убедитесь, что security groups и firewalls разрешают порт 443 и зарубежные диапазоны IP-адресов, а также что не установлен лимит исходящей полосы пропускания.
  </Step>
</Steps>

## Решения

### Вариант 1: Переключитесь на публичный DNS (проще всего)

DNS по умолчанию на многих серверах разрешает Cloudflare в удаленные узлы. Попробуйте эти публичные DNS-серверы:

```bash theme={null}
{/* /etc/resolv.conf */}
nameserver 1.1.1.1        # Cloudflare
nameserver 8.8.8.8        # Google
nameserver 223.5.5.5      # AliDNS
nameserver 119.29.29.29   # DNSPod
```

<Tip>
  Отдавайте предпочтение `1.1.1.1` — это собственный DNS Cloudflare, который надежно разрешает запросы к ближайшему edge-узлу Cloudflare, что идеально подходит для трафика R2 / Cloudflare CDN.
</Tip>

### Вариант 2: Оптимизируйте способ загрузки

<CardGroup cols={2}>
  <Card title="Параллельные загрузки" icon="layers">
    Для пакетов файлов используйте параллельный загрузчик (`aria2c -x 8`, Python `asyncio + httpx`), чтобы полностью задействовать пропускную способность.
  </Card>

  <Card title="Возобновляемые загрузки" icon="refresh-cw">
    Для больших видео используйте HTTP Range-запросы с повторными попытками, чтобы сбой не начинал загрузку с нуля.
  </Card>

  <Card title="Повторное использование соединения" icon="plug">
    Используйте клиенты с HTTP/2 или keep-alive (`httpx`, `requests.Session()`), чтобы избежать повторных рукопожатий.
  </Card>

  <Card title="Потоковая запись на диск" icon="hard-drive">
    Потоково записывайте ответ сразу на диск вместо того, чтобы загружать весь файл в память.
  </Card>
</CardGroup>

**Пример на Python (рекомендуется)**:

```python theme={null}
import httpx
import asyncio

async def download(url: str, path: str):
    async with httpx.AsyncClient(http2=True, timeout=120) as client:
        async with client.stream("GET", url) as resp:
            resp.raise_for_status()
            with open(path, "wb") as f:
                async for chunk in resp.aiter_bytes(chunk_size=1024 * 256):
                    f.write(chunk)

asyncio.run(download("<CDN URL>", "output.mp4"))
```

**Пример aria2c (CLI)**:

```bash theme={null}
aria2c -x 8 -s 8 -k 1M --file-allocation=none "<CDN URL>"
```

### Вариант 3: Перейдите в регион с лучшей связностью

Если ваш сценарий это позволяет, выбирайте регионы с хорошей связностью с Cloudflare:

<CardGroup cols={2}>
  <Card title="За рубежом (рекомендуется)" icon="globe">
    AWS / GCP / Azure / Cloudflare Workers все достигают Cloudflare R2 с очень низкой задержкой (обычно 10-50ms).
  </Card>

  <Card title="Китай: премиальные ЦОДы" icon="server">
    Если вам обязательно нужно разворачивать в материковом Китае, выбирайте ЦОДы с BGP для трех сетей и премиальными международными каналами (CN2 GIA, CMI, AS9929).
  </Card>

  <Card title="Гонконг / Сингапур" icon="network">
    Хороший компромисс: низкая задержка до материкового Китая (30-80ms) и отличная связность Cloudflare в Азиатско-Тихоокеанском регионе.
  </Card>

  <Card title="Избегайте дешевых VPS" icon="alert-triangle">
    Бюджетные хостинги часто имеют сильно перегруженный международный исходящий канал и в часы пик могут падать до нескольких десятков KB/s. Не рекомендуется для нагрузок с интенсивным использованием CDN.
  </Card>
</CardGroup>

### Вариант 4: Передавайте через другой хост (крайняя мера)

Если ваш сервер действительно не может быстро достучаться до Cloudflare и вы не можете сменить регион:

1. **Используйте зарубежный сервер как промежуточный узел**: сначала загрузите на зарубежную машину, затем передайте обратно через приватный/премиальный канал
2. **Передавайте через собственное object storage**: зеркально скопируйте ресурс в свое OSS / COS / S3 (например, bucket в регионе Китая) и отдавайте его оттуда
3. **Предварительно прогрейте и кэшируйте**: один раз загрузите с вашего backend и обслуживайте последующие запросы из локального кэша

<Warning>
  **Учитывайте срок действия**

  URL CDN, возвращаемые APIYI для изображений/видео, обычно имеют ограниченный срок действия (см. возвращаемый URL). Загружайте и сохраняйте ресурсы в своем хранилище **сразу после** того, как придет callback, чтобы позже избежать нерабочих ссылок.
</Warning>

## Частые вопросы

<AccordionGroup>
  <Accordion title="Почему мой ноутбук работает быстро, а сервер — медленно?">
    Домашний широкополосный интернет часто использует оптимизированные международные маршруты через вашего провайдера, тогда как облачные серверы идут через международный исходящий канал ЦОДа — качество может сильно отличаться. Сначала проверьте международную полосу пропускания вашего ЦОДа и выполните описанные выше шаги по устранению неполадок.
  </Accordion>

  <Accordion title="Я сменил DNS, но все равно медленно — почему?">
    DNS влияет только на то, какой edge-узел CDN будет выбран. Если сама международная полоса пропускания уже перегружена, одного изменения DNS недостаточно. Рассмотрите возможность смены региона или ретрансляции через зарубежный хост.
  </Accordion>

  <Accordion title="Cloudflare R2 заблокирован в материковом Китае?">
    Cloudflare не заблокирован в материковом Китае, но международный исходящий канал может перегружаться в часы пик, а некоторые ISP выбирают неоптимальные маршруты, поэтому качество доступа нестабильно. Это общая проблема трансграничных сетевых соединений, а не проблема, специфичная для R2.
  </Accordion>

  <Accordion title="Загрузка видео постоянно завершается сбоем — что мне делать?">
    Используйте загрузчик с поддержкой **возобновления**, например `aria2c` или `wget -c`, с разумными тайм-аутами и повторными попытками:

    ```bash theme={null}
    aria2c -x 8 -s 8 -c --max-tries=10 --retry-wait=3 "<CDN URL>"
    ```
  </Accordion>

  <Accordion title="Может ли APIYI возвращать Base64 вместо URL CDN?">
    Видео имеют большой размер (от десятков до сотен MB), а Base64 добавляет около 33% накладных расходов без поддержки возобновления — это на самом деле медленнее и тратит полосу пропускания. Мы **не рекомендуем** использовать Base64 для больших файлов. Некоторые эндпоинты для генерации изображений поддерживают ответы Base64; см. соответствующую документацию API.
  </Accordion>

  <Accordion title="Как подтвердить, что узкое место — в моей сети, а не в CDN?">
    Выполните тот же тест `curl` с зарубежного хоста (AWS Tokyo, Singapore и т. д.). Если там все быстро, а на вашем сервере медленно, узкое место находится между вашим сервером и Cloudflare — а не в самом CDN.
  </Accordion>
</AccordionGroup>

## Связанные документы

<CardGroup cols={2}>
  <Card title="Настройка сетевого прокси" icon="network" href="/ru/faq/network-proxy">
    Параметры прокси при нестабильном международном подключении
  </Card>

  <Card title="Где находятся серверы APIYI?" icon="server" href="/ru/faq/server-location">
    Узнайте о расположении серверов APIYI и задержке
  </Card>

  <Card title="API генерации видео Veo" icon="video" href="/en/api-capabilities/veo/overview">
    Формат вывода и допустимость URL для видео API
  </Card>

  <Card title="Связаться с поддержкой" icon="headphones" href="https://work.weixin.qq.com/kfid/kfc9adfd5810ece25ec">
    Если ничего не помогает, наша команда поможет вам
  </Card>
</CardGroup>

<Info>
  **Информация для передачи в поддержку**

  При обращении к нам, пожалуйста, укажите:

  * Конкретный CDN URL (чувствительные параметры можно скрыть)
  * Регион вашего сервера / DC / облачный провайдер
  * Полный вывод `mtr` или `traceroute`
  * Вывод команды замера времени `curl` выше
  * Временной промежуток, когда возникла проблема (это помогает сопоставить с мониторингом трансграничного канала)
</Info>
