Bug report
Bug description:
When HTTPS is enabled, the command-line interface of http.server can't bind IPv6 addresses correctly and the --directory flag doesn't work.
bind IPv6
HTTPS server throw an exception when I was trying to bind a IPv6 address, but HTTP server can bind IPv6 address.
# HTTPS $ ./python -m http.server --tls-cert ~/Projects/ssl/localhost.crt --tls-key ~/Projects/ssl/localhost.key -b ::1 # ... TypeError: AF_INET address must be a pair (host, port) # HTTP $ ./python -m http.server -b ::1 Serving HTTP on ::1 port 8000 (http://[::1]:8000/) ...
--directory issue
The HTTPS server always uses the work path of current terminal as its root directory and ignores the --directory flag:
# HTTPS $ ./python -m http.server --tls-cert ~/Projects/ssl/localhost.crt --tls-key ~/Projects/ssl/localhost.key -d ~/test Serving HTTPS on 0.0.0.0 port 8000 (https://0.0.0.0:8000/) ... 127.0.0.1 - - [18/May/2025 13:28:16] "GET / HTTP/1.1" 200 - $ curl -k https://0.0.0.0:8000/ <!DOCTYPE HTML> <html lang="en"> <head> # ... </head> <body> <h1>Directory listing for /</h1> <hr> <ul> <li><a href=".azure-pipelines/">.azure-pipelines/</a></li> <li><a href=".coveragerc">.coveragerc</a></li> <li><a href=".devcontainer/">.devcontainer/</a></li> <li><a href=".editorconfig">.editorconfig</a></li> <li><a href=".git/">.git/</a></li> <li><a href=".gitattributes">.gitattributes</a></li> <li><a href=".github/">.github/</a></li> # ... # Files in my cpython repo's root path </ul> <hr> </body> </html> # HTTP $ ./python -m http.server -d ~/test Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 127.0.0.1 - - [18/May/2025 13:24:30] "GET / HTTP/1.1" 200 - $ curl http://0.0.0.0:8000/ <!DOCTYPE HTML> <html lang="en"> <head> # ... </head> <body> <h1>Directory listing for /</h1> <hr> <ul> <li><a href="1">1</a></li> <li><a href="2">2</a></li> <li><a href="3">3</a></li> </ul> <hr> </body> </html>
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux