Как отправлять HTTPS-запросы к серверу, который принимает только HTTP?

У меня есть веб-сайт, развернутый на основном домене n, и я создал для него поддомен, на котором разместил VPS-сервер на beget. Я загрузил туда своего Telegram-бота. Проблема заключается в том, что я пытаюсь отправлять запросы с сайта, размещенного на основном домене, к Telegram-боту, который выполняет определенные задачи. Однако, когда я попытался отправить запросы напрямую, возникла ошибка Mixed Content, так как мой основной домен работает по HTTPS, а сервер VPS — по HTTP. Какие шаги мне следует предпринять для решения этой проблемы?
  • 10 октября 2024 г. 13:14
Ответы на вопрос 4
Ваша ситуация связана с политикой безопасности браузеров, известной как Mixed Content, которая блокирует запросы, если основной сайт загружен по HTTPS, а ресурсы загружаются через HTTP. Вот несколько подходов к решению этой проблемы:

1. **Переключить VPS-сервер на HTTPS**:
   - Самый надежный и рекомендованный способ — это настроить SSL-сертификат на вашем VPS-сервере. Вы можете использовать бесплатный сервис, такой как [Let's Encrypt](https://letsencrypt.org/), для получения сертификата.
   - Установите и настройте его, чтобы ваш Telegram-бот стал доступен по HTTPS. Это позволит избегать проблем с Mixed Content.

2. **Использовать обратный прокси**:
   - Если вы не можете установить HTTPS на своем VPS, вы можете настроить обратный прокси-сервер на основном домене. Например, вы можете использовать Nginx или Apache, чтобы перенаправлять запросы с HTTPS на HTTP.
   - На основном сервере создайте конфигурацию, которая будет получать запросы через HTTPS и перенаправлять их на ваш VPS по HTTP.

3. **С помощью CORS и создания промежуточного сервиса**:
   - Создайте промежуточный сервер, который будет принимать HTTPS-запросы от основного домена и отправлять их на ваш VPS. Сервер может работать как API-конечная точка.
   - Это может потребовать дополнительных настроек и управления запросами и ответами.

4. **Использовать WebSockets или другие технологии**:
   - Если ваш Telegram-бот поддерживает WebSocket, вы можете настроить WebSocket-соединение, которое будет работать через HTTPS, если это возможно для вашего сценария использования.

5. **AJAX с использованием HTTP**:
   - Хотя это не рекомендуется из соображений безопасности, вы можете настроить ваши AJAX-запросы так, чтобы они отправлялись на ваш поддомен по HTTP, но это потребует изменения настроек, чтобы разрешить смешанное содержимое, что является небезопасным.

### Рекомендация
Наиболее безопасный и наиболее рекомендуемый путь — настроить HTTPS на VPS-сервере с помощью Let's Encrypt. Это не только устраняет проблему Mixed Content, но и обеспечивает безопасное соединение для передачи данных.
сделайте все свои сервера https
на сервере надо ставить HTTPS 
это уже стандарт с 2007 года примерно
Что то вы не то делаете! 

mixed content это сообщение в браузере! это значит вы запрос к вашему секретному управлению телеграм ботом делаете из браузера пользователя, все запросы видны, их можно вызвать вручную, в т.ч. догадаться о формате запроса.
Нельзя с браузера отправлять http запросы, так как пользователи, работающие в ненадежных сетях (например публичные wifi без пароля или с известным паролем), могут получить подмену этих запросов (особенно опасно стартовую страницу или скрипты так подгружать) или просто их подсмотреть. Бот телеграм обычно должен вызываться только с серверов телеграмма, но никак не пользователями напрямую http запросами.

Ваш веб сервер должен отправлять запросы в бота телеграм со стороны бакэнда (перепроверив условия, права доступа пользователя и т.п.). Так вот со стороны бакэнда нет никаких ограничений типу запроса.
Похожие вопросы