👻 Провайдеры: запасные адреса и заголовки
У провайдеров с 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: 3600fallback-urls
Заголовок раздела «fallback-urls»Список запасных адресов. Сначала запрашивается 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
Заголовок раздела «В Prizrak-Box»В роутинге Prizrak-Box оба поля задаются у rule-set’ов в RuleSetUrls: header и fallback. header попадает в rule-provider всегда. fallback попадает в fallback-urls, только если приложение собрано на Prizrak-Core v1.19.33-r7 или новее; на более старом ядре адреса сохраняются в роутинге, но в профиль не пишутся. Подробнее — в разделе Роутинг → Расширенный формат Prizrak-Box.