Server is hts. Client is htc. htc supports HTTP proxy and proxy authentication.

# Server listens on port 80, and forwards to local port 22
hts -F 127.0.0.1:22 80

# Client forwards local port 3333 to <server ip>:80
htc [-A user:password] [-P <proxy ip>:port] -F 3333 <server ip>:80

# SSH to server from client. Client just needs to connect to a local port.
ssh -p 3333 user@127.0.0.1

# The whole process is as follows (7001/8002/9003 are arbitrary ports):
#
#    Client                      Server
# 7001 -> 3333                 9003 -> 22
#           \                   /
#          8002 --httptunnel-- 80

It seems IPv6 is not supported because I find hts doesn’t listen on IPv6 ports.