AF over AF_UNIX:与unix套接字的HTTP连接

RDX*_*RDX 19 sockets webserver client-server http unix-socket

我们有HTTP服务器,我们有基于HTTP客户端的应用程序(在Linux上)正常工作.

但是现在我们需要从客户端应用程序中侦听Unix域套接字.那么是否可以从unix域套接字发送/接收httprequest,httpresponse包?

Scenerio1:连接到localhost时,需要通过将HTTP连接到unix套接字而不是HTTPS连接到本地端口来消除SSL开销.

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

提前谢谢了.

Aln*_*tak 11

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

但是,我从未见过知道如何连接到这样一个套接字的HTTP客户端.如果您确实需要使用URL与服务器通信,那么我知道没有可用的URL格式.

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

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

  • Curl和Go现在都支持这个,例如在最近的curl`curl -v --unix-socket /var/run/docker.sock上http:/ containers/json`将与Docker交谈,它在unix套接字上有一个Go实现. (9认同)
  • 在 Python 上,库 [requests-unixsocket](https://pypi.org/project/requests-unixsocket/) 为此目的而存在,使用非标准方案“http+unix://%2Fpath%2Fto%2Fsocket” /url 路径` (5认同)
  • @PowerPC据我所知(我看过),没有为HTTP定义的URL方案,允许您指定套接字路径而不是主机名.我知道应用程序(例如MySQL)采用简单地将"localhost"转换为"使用UNIX套接字"而不是TCP/IP的方法. (3认同)
  • 显然,Node.js也是如此:/sf/answers/2967210781/ (3认同)