HTTP over AF_UNIX: HTTP connection to unix socket

16,031

So long as your socket is a stream socket (SOCK_STREAM rather than SOCK_DGRAM) then it's technically possible. There's nothing in HTTP that requires TCP/IP, it just requires a reliable bidirectional stream.

However I've never seen an HTTP client that knows how to connect to such a socket. There's no URL format that I know of that would work, should you actually need to use a URL to talk to the server.

Also note that some things that normal web servers depend on (such as getpeername(), to identify the client) make no sense when you're not using TCP/IP.

EDIT I just saw your edit about mapping localhost to the UNIX socket. This is perfectly feasible, you just need to ensure that the client knows how to find the path of the UNIX socket that should be used instead of connecting to 127.0.0.1:xxx

Share:
16,031

Related videos on Youtube

Rohit
Author by

Rohit

Updated on June 12, 2022

Comments

  • Rohit
    Rohit almost 2 years

    We have HTTP server , for which we have HTTP client based application (on Linux) working fine.

    But now we need to listen on Unix domain sockets from our client application. So is it possible to send/receive httprequest, httpresponse packet from the unix domain socket?

    Scenerio1:When connecting to localhost, it is required to eliminate the SSL overhead by connecting HTTP to the unix socket instead of HTTPS to the local port.

    Basically Looking for a standard encoding a unix socket path in an HTTP URL.

    Many Thanks in advance.

  • Alnitak
    Alnitak about 11 years
    @PowerPC As far as I know (I've looked) there is no defined URL scheme for HTTP that allows you to specify a socket path instead of a hostname. I know of apps (e.g. MySQL) that take the approach of simply converting "localhost" to mean "use the UNIX socket" instead of TCP/IP.
  • Karthik Vaidyanathan
    Karthik Vaidyanathan almost 8 years
    Curl and Go both support this now, eg on recent curl curl -v --unix-socket /var/run/docker.sock http:/containers/json will talk to Docker which has a Go implementation over unix sockets.
  • Jean Hominal
    Jean Hominal about 4 years
    On Python, the library requests-unixsocket exists for that purpose, using the non-standard scheme http+unix://%2Fpath%2Fto%2Fsocket/url-path