【问题标题】:How to implement HTTP Tunneling如何实现 HTTP 隧道
【发布时间】:2010-11-14 03:31:05
【问题描述】:

我编写了一个连接到后端服务器以交换数据的 Flash (Flex) 客户端。

我还从头开始编写我的服务器,它有两个目的:

(1) Web (HTTP) 服务器 - 默认情况下侦听端口 80

(2) Socket/Application-Server - 默认监听 443 端口

仅供参考,为方便起见,两台服务器都在同一进程空间中运行。他们预计不会处理大量负载,所以我可以接受。

只要将 Flash 客户端从 HTTP 套接字提供给浏览器,客户端就会尝试打开一个 XMLSocket 到套接字/应用程序服务器。

我现在想实现 HTTP 隧道,这样即使用户在防火墙后面,我的客户端也可以连接到应用程序服务器。我不希望涉及任何外部服务器(代理等) - 只需使用我已有的服务器即可。

我的问题:

(1) 使用 443 端口更好吗? (它会更好地欺骗防火墙吗?)

(2) 据我所知,我需要做的只是确保我的实际应用程序数据被简单地封装在一个 HTTP 结构中(前面是一个虚拟的 HTTP 标头),来自客户端和服务器边。是这样还是我在这里遗漏了什么?

(3) 我是否需要继续隐藏/封装我通过套接字发送的每条消息的数据,或者我可以在打开连接时封装第一条消息?

提前谢谢各位! 绒毛

【问题讨论】:

  • 为什么不在端口 80 上合并呢?有许多基于 HTTP 的 RPC 技术,例如 XMLRPS、REST 甚至 SOAP……为什么不使用其中的一种呢?只需为 Web 请求和应用程序请求定义不同的 url
  • 您是从头开始编写服务器的吗?操作系统和所有?我有点怀疑。
  • 呃,我很确定他的意思是网络服务器。不是硬件或操作系统..
  • 正如 Meeh 所写,我指的是网络服务器。我无意实现操作系统。我这样做是因为我需要一个灵活、小巧且灵活的 Web 服务器来满足我的需求。它将在嵌入式设备上运行,因此我不希望在那里运行任何繁重的进程。
  • Gregory - 是的,这确实是选项之一(在同一个端口上运行)。我可以立即实现,问题是这是正确的方法,还是在不同的端口(特别是与 HTTPS 关联的 443)上建立隧道会更好。

标签: apache-flex http tunneling


【解决方案1】:

不要重新发明轮子 - 通过 AMF 协议使用远程处理。 AMF 一种基于 HTTP 的二进制格式,可在 ActionScript (MXML) 和服务器端语言之间执行序列化。从技术上讲,这是 HTTP 隧道。 Adobe 为 AS/Java 提供 AMF 的 BlazeDS(开源)和 LCDS(商业)实现,但也有用于 AS/PHP、AS/Python、AS/Ruby、AS/.Net 的 AMF 的第三方实现。

顺便说一句,AMF 是一种开源格式。

【讨论】:

  • 谢谢 Yakov,我会阅读它,虽然我感觉这将涉及运行另一个代理/服务器/进程,我无意这样做。我的 Web 服务器在嵌入式环境中运行。我从头开始编写它是有原因的,那就是为了以最小的开销完全控制它。恐怕另一个服务器/服务在我的情况下是不可接受的。
  • 好的,我已经阅读了有关 AMF、BladeDS 和 LCDS 的信息。从本质上讲,这对我来说是一个杀手级的超调,因为它提供了我不需要的东西(对象远程处理,因为我使用自己的 XML 内容进行通信,并且不发送太多对象只是简单的命令/回复),但更重要的是这确实not 似乎完全取代了 HTTP 隧道。关于隧道的整个想法是它绕过防火墙。我找不到任何证据表明您提出的技术可以满足这一需求。
  • 据我所知,在过去 8 年中,没有防火墙限制 AMF(二进制)内容。您的 Flex 应用程序通过端口 80 或 443 与 BlazeDS/LCDS servlet 通信。除非您的 flex 应用程序需要连接到没有具有适当权限的 crossdomain.xml 的第 3 方服务器,否则您不需要使用代理。
猜你喜欢
  • 2011-09-06
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多