【问题标题】:HTTP over AF_UNIX: HTTP connection to unix socketAF_UNIX 上的 HTTP:到 unix 套接字的 HTTP 连接
【发布时间】:2019-07-25 12:30:11
【问题描述】:

我们有 HTTP 服务器,我们有基于 HTTP 客户端的应用程序(在 Linux 上)运行良好。

但是现在我们需要从我们的客户端应用程序监听 Unix 域套接字。 那么是否可以从unix域socket发送/接收httprequest、httpresponse包呢?

场景1:连接localhost时,需要去掉SSL 通过将 HTTP 连接到 unix 套接字而不是 HTTPS 连接到 本地端口。

基本上是在 HTTP URL 中寻找标准编码 unix 套接字路径。

非常感谢。

【问题讨论】:

    标签: http sockets webserver client-server unix-socket


    【解决方案1】:

    只要您的套接字是流套接字(SOCK_STREAM 而不是SOCK_DGRAM),那么它在技术上是可行的。 HTTP 中没有什么需要 TCP/IP,它只需要一个可靠的双向流。

    但是,我从未见过知道如何连接到此类套接字的 HTTP 客户端。如果您确实需要使用 URL 与服务器通信,我所知道的任何 URL 格式都不会起作用。

    另请注意,当您不使用 TCP/IP 时,普通 Web 服务器所依赖的某些东西(例如 getpeername(),用于识别客户端)是没有意义的。

    编辑 我刚刚看到您关于将 localhost 映射到 UNIX 套接字的编辑。这是完全可行的,您只需要确保客户端知道如何找到应该使用的 UNIX 套接字的路径,而不是连接到 127.0.0.1:xxx

    【讨论】:

    • @PowerPC 据我所知(我已经看过),没有为 HTTP 定义的 URL 方案允许您指定套接字路径而不是主机名。我知道一些应用程序(例如 MySQL)采用简单地将“localhost”转换为表示“使用 UNIX 套接字”而不是 TCP/IP 的方法。
    • Curl 和 Go 现在都支持这一点,例如最近 curl curl -v --unix-socket /var/run/docker.sock http:/containers/json 将与通过 unix 套接字实现 Go 的 Docker 对话。
    • 在 Python 上,库 requests-unixsocket 用于此目的,使用非标准方案 http+unix://%2Fpath%2Fto%2Fsocket/url-path
    猜你喜欢
    • 2012-07-02
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多