1

Я создаю приложение, которое должно работать на мобильном смартфоне в сети GPRS/3G. Я делаю бит операции, поэтому каждый байт, потраченный через HTTP-заголовки , плох. Мобильные провайдеры в моем регионе активно используют прокси и тому подобное. Веб-сокеты для одного не работают.

HTTP на портах 80 и 443, кажется, всегда работает, но означает ли это, что я могу создать соединение через сокет TCP с моим сервером на том же порту и начать двунаправленную связь? Я не думаю, что мобильные приложения, такие как WhatsApp, Viber и т.д., Используют HTTP-соединения, но я не нашел подробной информации об их реализациях и о том, делают ли они что-нибудь, чтобы сеть работала безупречно по 3G, или же она просто работает как есть. ,

2 ответа2

9

TCP и HTTP это разные вещи.

TCP - это транспортный уровень. По определению, он отвечает за перенос протоколов прикладного уровня (в вашем случае HTTP). TCP не работает через порт. Это арбитр портов. Другими словами, когда вы подключаетесь к HTTP-серверу, вы подключаетесь к TCP-порту 80. Когда вы подключаетесь к HTTPS, вы подключаетесь через TCP-порт 443.

HTTP и HTTPS могут работать через любой порт TCP. 80 и 443 только общие. Вы можете заставить любое приложение прослушивать эти порты, если хотите. Так что да, вы можете подключиться к вашему серверу через порт 80, используя другой протокол вместо HTTP, но только если сервер настроен на прослушивание этого порта с использованием этого другого протокола, и только если HTTP или HTTPS настроены так, чтобы не использовать эти порты (при условии, что вы используете веб-сервер на нем).

Вы упомянули, что ваш провайдер использует прокси. Можно ли установить соединение не через HTTP/HTTPS через порт 80 или 443? Это зависит от того, насколько умен прокси. Если он выполняет проверку пакетов, он может проверять заголовки HTTP, чтобы убедиться, что трафик, проходящий через эти порты, действительно является трафиком HTTP. Есть способы подделать его, но это зависит от того, насколько глубоко прокси проверяет трафик. Если прокси-сервер блокирует не HTTP/HTTPS-трафик на портах HTTP/HTTPS, то вы ничего не можете с этим поделать, за исключением использования вашего поставщика (или оплаты более высокой цены в зависимости от обстоятельств).

Когда речь заходит о том, как взаимодействуют различные мобильные приложения, все зависит от того, как производитель написал их. Большинство используют HTTP или HTTPS через порт 80 или 443 соответственно, потому что большинство мобильных приложений - это просто веб-приложения со скинами. Но нет правила, которое говорит, что они должны, и у вас нет реального способа узнать, если вы как-то не понюхаете пакеты.

Я надеюсь, что ответил на ваш вопрос.

6

Если я правильно понимаю ваш вопрос, я мог бы перефразировать его следующим образом: «Если сетевая инфраструктура позволяет HTTP-трафику проходить через определенный порт, это также позволит передавать чистый TCP (без полной HTTP-совместимой операции или даже с поддельными заголовками HTTP) этот порт?"

К сожалению, ответ таков: «Это зависит от деталей, которые вы еще не обнаружили, относительно того, как рассматриваемые сети фильтруют трафик». Безусловно, существуют сетевые инфраструктуры, которые фильтруют трафик только по номеру порта, поэтому любой трафик TCP через порт 80 или 443 может работать независимо от того, выглядят ли полезные данные TCP или действуют как HTTP.

Тем не менее, существуют другие сети, которые вставляют прокси-серверы HTTP или проводят глубокую проверку пакетов, чтобы определить, действительно ли у трафика есть заголовки HTTP, и такие сети блокируют трафик, который не является правильным HTTP. Вы могли бы обойти некоторые из этих фильтров, поставив подделку ...

GET / HTTP/1.0\r\n\r\n

... во главе каждого TCP-потока клиент-сервер и фальшивки ...

HTTP/1.0 200 OK\r\n\r\n

… Во главе каждого TCP-потока между серверами. Но такого рода подделок может быть недостаточно, чтобы заставить его работать через полный HTTP-прокси.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .