As of version 9.1.5, SWI-Prolog supports IPv6. This has few 
implications for the HTTP package because most aspects are handled by library(socket) 
and library(uri). This sections highlights a few aspects.
The client libraries use http_open/3, 
which in turn uses
tcp_connect/3. 
This causes the client to use addresses returned by
host_address/3, 
which is based on the C API getaddrinfo(), in the order provided 
by getaddrinfo(). The URL is parsed using library(uri), 
which allows enclosing IPv6 addresses in []. The query 
below accesses an IPv6 server on localhost at port 8080
?- http_open('http://[::1]:8080', Stream, []).
The predicate http_server/2 
can be used to create an IPv6 server using one of the queries below. The 
first binds to all interfaces. The second only binds to the IPv6 
equivalent of localhost. Note that the IPv6 address needs 
to be quoted to create the desired
Host:Port term.
?- http_server(Goal,[port('::':8080)]).
?- http_server(Goal,[port('::1':8080)]).