# Поддерживаемые пользовательские истории (HTTP/HTTPS)

Документ фиксирует реализованные сценарии уровня продукта для HTTP-маршрутизации и обратного прокси через туннель.

---

## US-1 — Базовый HTTP/HTTPS-туннель (вебхуки и локальная разработка)

**Как** разработчик, тестирующий вебхук локально,  
**я хочу** опубликовать `localhost:3000` по HTTPS-URL туннеля,  
**чтобы** внешний сервис мог слать POST без деплоя.

**Поддерживается:** да.

**Поведение**

- Туннель с протоколом `http` или `https` указывает на локальный `target_addr`; входящие запросы на URL туннеля проксируются на этот адрес.
- Доступ по хосту из выданного URL туннеля (поддомен на домене сервиса).

С чего начать (CLI)

```bash
fortunnels -protocol http -local 127.0.0.1:3000
```

### Для локальной разработки с `allowedDevOrigins`

Если веб-приложение запускается через dev-сервер, который проверяет origin (например, `next dev`), и его нужно открывать через выданный туннельный URL, добавьте в конфигурацию:

```js
allowedDevOrigins: [
  "fortunnels.ru",
  "*.fortunnels.ru",
],
```

**См. также:** [описание HTTP/HTTPS-туннелей](/docs#http-routing/description).

---

## US-2 — Автоматический переход HTTP → HTTPS на публичном входе

**Как** разработчик мобильного приложения,  
**я хочу** чтобы локальный HTTP-бэкенд был доступен снаружи по HTTPS без ошибок сертификата на стороне приложения,  
**чтобы** клиент с политикой «только HTTPS» мог ходить на стенд.

**Поддерживается:** да (при включённой HTTPS-инфраструктуре и настройках редиректа).

**Поведение**

- На стороне развёртывания публичный вход обслуживается TLS.
- У туннеля есть флаг `redirect_http`: при включённом редиректе и доступном HTTPS незащищённый HTTP может перенаправляться на HTTPS.
- Мобильное приложение обращается к HTTPS-URL туннеля; шифрование до браузера/клиента обеспечивает платформа, а не локальный HTTP-сервер.

**Ограничение:** локальный сервис может оставаться на `http://127.0.0.1:…` — это отдельный участок пути от публичного входа до агента; для строгой модели доверия см. TCP/TLS (другая возможность).

---

## US-4 — Поддержка WebSocket через HTTP-туннель

**Как** разработчик real-time функций,  
**я хочу** проксировать WebSocket (Upgrade) без обрыва соединения,  
**чтобы** тестировать чат/стриминг против URL туннеля.

**Поддерживается:** да.

**Поведение**

- Запросы с `Connection: Upgrade` и `Upgrade: websocket` обрабатываются обратным прокси и передаются на целевой `target_addr` туннеля.
- Требуется активное соединение клиента туннеля (как и для обычного HTTP).

**Замечания по эксплуатации:** таймауты на публичном входе и в приложении должны допускать долгоживущие соединения.

---

## US-5 — Публичный и приватный режим HTTP/HTTPS-туннеля

**Как** владелец платного тарифа,  
**я хочу** в дашборде переключать туннель между публичным и приватным режимом,  
**чтобы** контролировать, могут ли анонимные посетители открыть URL туннеля.

**Поддерживается:** да (HTTP/HTTPS, тариф с правом приватных туннелей).

**Поведение**

- На странице [Туннели](/dashboard/tunnels) у активного HTTP- или HTTPS-туннеля есть колонка **«Публичный»**.
- **Включено** — публичный режим (по умолчанию): доступ по URL с учётом лимитов и политик сервиса.
- **Выключено** — приватный режим: анонимные запросы отклоняются; владелец и администратор сохраняют доступ.
- На бесплатном тарифе переключатель заблокирован в положении «публичный»; подсказка предлагает сменить тариф.
- При возврате в публичный режим запрашивается подтверждение — ранее выданные ссылки доступа отзываются.

**См. также:** [приватные HTTP-туннели](/docs#http-routing/tunnel-visibility/description), [справочник API](/docs#http-routing/tunnel-visibility/apireference).

---

## Связь с другими возможностями

| Потребность | Возможность |
|-------------|-------------|
| Скрыть туннель от анонимов, выдать доступ по ссылке | [Приватные HTTP-туннели](/docs#http-routing/tunnel-visibility/description) |
| Фиксированное имя хоста (бренд, OAuth) | Кастомные домены |
| Ограничение по IP | Контроль доступа |
| Сырые TLS-потоки без терминации HTTP на входе | TCP-туннели (US-11) |
