Перейти к содержимому

👻 Провайдеры: запасные адреса и заголовки

У провайдеров с type: http (rule-providers и proxy-providers) есть два поля для запроса:

ПолеЧто делаетГде есть
fallback-urlsзапасные адреса, если основной не ответилтолько Prizrak-Core
headerзаголовки HTTP-запросаmihomo и Prizrak-Core
rule-providers:
ru-blocked:
type: http
behavior: domain
format: mrs
url: https://github.com/legiz-ru/mihomo-rule-sets/raw/main/ru-bundle/rule.mrs
fallback-urls:
- https://cdn.jsdelivr.net/gh/legiz-ru/mihomo-rule-sets@main/ru-bundle/rule.mrs
header:
User-Agent:
- "Mozilla/5.0"
path: ./rule-sets/ru-blocked.mrs
interval: 86400
proxy: DIRECT
proxy-providers:
my-sub:
type: http
url: https://sub.example.com/sub
fallback-urls:
- https://mirror.example.com/sub
path: ./proxies/my-sub.yaml
interval: 3600

Список запасных адресов. Сначала запрашивается url, затем запасные адреса по порядку. Берётся первый, который ответил.

Один запасной адрес можно записать и просто строкой:

fallback-urls: https://cdn.jsdelivr.net/gh/legiz-ru/mihomo-rule-sets@main/ru-bundle/rule.mrs

Когда ядро переходит к следующему адресу:

  • ошибка соединения: DNS, TLS, таймаут;
  • ответ с кодом не 2xx и не 304;
  • тело ответа не дочиталось: обрыв или ошибка чтения.

Когда не переходит. Ответ 200 с неверным содержимым — например, страница-заглушка провайдера связи или HTML вместо списка. Ядро проверяет содержимое уже после того, как адрес ответил, и к запасным адресам не идёт. Провайдер оставляет прежний файл, а если файла ещё нет, остаётся пустым.

Подробности:

  • Таймаут. У каждой попытки свой — 20 с. Если основной адрес не отвечает совсем, запасной запрашивается через 20 с.
  • Порядок. Каждое обновление начинается с основного адреса, даже если в прошлый раз ответил запасной.
  • 304 Not Modified от основного адреса — это успех: старые данные остаются, запасные адреса не запрашиваются.
  • ETag хранится отдельно для каждого адреса.
  • header, proxy и size-limit действуют на все адреса одинаково.
  • subscription-userinfo у proxy-provider берётся из ответа того адреса, который ответил.
  • Допустимые адреса. Только http:// и https://. Пустые строки и повторы пропускаются, всё остальное — ошибка провайдера.
  • Лог. При переходе на запасной адрес в лог пишется предупреждение: какой провайдер, какой адрес не ответил и почему. Если не ответил ни один, ошибка перечисляет все причины. Адреса в лог пишутся без логина, пароля и параметров запроса.
  • API. url провайдера — по-прежнему основной адрес. У провайдеров с fallback-urls появляется lastUrl — адрес, который ответил последним, без параметров запроса.

Без fallback-urls провайдер работает как раньше: один запрос на один адрес.


Заголовки HTTP-запроса к провайдеру. Ключ — имя заголовка, значение — список строк.

header:
User-Agent:
- "Mozilla/5.0"
Authorization:
- "Bearer token"

Это обычное поле mihomo, оно работает и без Prizrak-Core. С fallback-urls те же заголовки уходят на каждый адрес.


В роутинге Prizrak-Box оба поля задаются у rule-set’ов в RuleSetUrls: header и fallback. header попадает в rule-provider всегда. fallback попадает в fallback-urls, только если приложение собрано на Prizrak-Core v1.19.33-r7 или новее; на более старом ядре адреса сохраняются в роутинге, но в профиль не пишутся. Подробнее — в разделе Роутинг → Расширенный формат Prizrak-Box.