【问题标题】:how to provide tcp/ssl support on the same port如何在同一端口上提供 tcp/ssl 支持
【发布时间】:2011-09-10 16:37:15
【问题描述】:

假设您在端口 80 上打开一个 tcp 套接字来处理 http 请求,并在端口 443 上打开一个 ssl 套接字来处理 https...一些代理如何在同一个端口上提供对它们的访问?

我只找到了这个link,但它不是很有用。您能否提供一个 erlang 示例或向我推荐一些资源,我可以从中了解更多有关该主题的信息?

提前致谢

【问题讨论】:

  • 澄清一下,您的问题是关于“端口统一”(在同一端口上运行两种不同类型的服务器)还是 HTTP 代理如何处理对 HTTP 和 HTTPS 服务器的请求?
  • 好吧...我会对您指出的两种情况都感兴趣(我正在尝试尽可能多地学习此类主题)..谢谢
  • 端口统一不太常见,但它依赖于查看传入的数据包以查看它应该处理哪个协议(@seb 的回答)。 HTTP 代理在使用 HTTPS 时并不会真正中继 HTTP 请求,而是在客户端完成后将整个 TCP 连接转发到 HTTPS 服务器(因此 SSL/TLS 层直接在浏览器和目标服务器之间建立)使用CONNECT(@MattH 的回答)。
  • 感谢布鲁诺,你真的很有帮助:)
  • 如果它对遇到这个问题的其他人有用,here is an implementation of port unification using Jetty in Java

标签: ssl tcp erlang


【解决方案1】:

一些代理如何在同一个端口上提供对它们的访问?

通过实现 HTTP CONNECT 方法,(非透明)代理可以切换为提供 TCP 隧道,例如,浏览器可以通过该隧道访问 HTTPS 资源。

一个相当稀疏的规范:
https://www.rfc-editor.org/rfc/rfc2616#section-9.9

【讨论】:

    【解决方案2】:

    如您提供的链接中所述,您需要编写自己的自定义服务器来嗅探请求,然后相应地重定向到正确的协议。

    正如http://www.faqs.org/rfcs/rfc2818.html 所指出的,HTTP 会话将以初始请求行(例如GET /)开始,而 TLS 会话将以 ClientHello 开始(有关wikipedia 的 TLS 会话的更多信息)

    网上有很多关于用 Erlang 编写服务器的资源,例如How to write a simple webserver in Erlang?

    顺便说一句,您的术语不正确:http、https SSL 和 TLS 是协议,并且都使用 TCP 套接字(通过网络)运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2012-12-24
      • 2010-11-20
      相关资源
      最近更新 更多