Alp*_*ran 2 networking 3g tcp mobile-phone http
我正在构建一个需要通过 GPRS/3G 网络在移动智能手机上运行的应用程序。我正在做一些操作,所以通过 HTTP 标头浪费的每个字节都是不好的。我所在地区的移动提供商大量使用代理等。一个 Websockets 不起作用。
端口 80 和 443 上的 HTTP 似乎总是有效,但这是否意味着我可以在同一端口上创建到我的服务器的 TCP 套接字连接并开始双向通信?我不认为像 WhatsApp、Viber 等移动应用程序使用 HTTP 连接,但我还没有找到关于它们实现的任何细节,以及它们是否采取任何措施使网络在 3G 上完美运行,或者它是否只是正常工作.
TCP 和 HTTP 是不同的东西。
TCP是传输层。根据定义,它负责承载应用层协议(在您的情况下为 HTTP)。TCP 不在端口上运行。它是端口的仲裁者。换句话说,当您连接到 HTTP 服务器时,您在 TCP 端口 80 上进行连接。当您连接到 HTTPS 时,您正在通过 TCP 端口 443 进行连接。
HTTP 和 HTTPS 可以在任何 TCP 端口上运行。80和443只是普通的。如果需要,您可以让任何应用程序侦听这些端口。所以是的,您可以使用其他协议而不是 HTTP 通过端口 80 连接到您的服务器,但前提是服务器配置为使用其他协议侦听该端口,并且仅当 HTTP 或 HTTPS 配置为不使用这些端口时(假设您在其上运行 Web 服务器)。
现在,您提到您的提供商正在使用代理。您可以通过端口 80 或 443 建立非 HTTP/HTTPS 连接吗?这取决于代理的智能程度。如果它正在执行数据包检查,它可能会验证 HTTP 标头以确保通过这些端口的流量确实是 HTTP 流量。有很多方法可以伪造它,但这取决于代理检查流量的深度。如果代理阻止了 HTTP/HTTPS 端口上的非 HTTP/HTTPS 流量,那么除了向您的提供商发出警告(或根据情况支付更高的价格)之外,您无能为力。
当谈到各种移动应用程序如何通信时,这完全取决于供应商如何编写它们。大多数移动应用程序分别通过端口 80 或 443 使用 HTTP 或 HTTPS,因为大多数移动应用程序只是蒙皮的 Web 应用程序。但是没有规则说他们必须这样做,除非您以某种方式嗅探数据包,否则您没有真正的方法可以知道。
我希望我已经回答了你的问题。
如果我正确理解您的问题,我可能会将其改写为:“如果网络基础设施允许 HTTP 流量通过某个端口,它是否也允许纯 TCP(没有完全符合 HTTP 的操作,甚至没有伪造的 HTTP 标头)通过那个港口?”
不幸的是,答案是“这取决于您尚未发现的有关相关网络如何过滤流量的详细信息”。肯定有网络基础设施仅根据端口号过滤流量,因此端口 80 或 443 上的任何 TCP 流量都可能有效,无论 TCP 有效负载看起来或行为类似于 HTTP。
但是,还有其他网络会插入 HTTP 代理或进行深度数据包检查以查看流量是否确实具有 HTTP 标头,而这些类型的网络会阻止不正确的 HTTP 流量。你可以通过放置一个假的来绕过其中的一些过滤器……
GET / HTTP/1.0\r\n\r\n
Run Code Online (Sandbox Code Playgroud)
......在每个客户端到服务器 TCP 流的头部,以及一个假......
HTTP/1.0 200 OK\r\n\r\n
Run Code Online (Sandbox Code Playgroud)
...在每个服务器到客户端 TCP 流的头部。但这种伪造可能不足以使其通过完整的 HTTP 代理工作。
| 归档时间: |
|
| 查看次数: |
8346 次 |
| 最近记录: |