Port 8000 is the most common HTTP development server port. Django (manage.py runserver), Python http.server, and many frameworks default to 8000. Development servers on this port have no TLS, no rate limiting, and often debug mode enabled. Never expose port 8000 development servers to the internet.
Port Number
8000
Protocol
TCP
Service
HTTP Development Server
Range
IANA Registered (1024–49151)
Check if Django debug mode is active (returns traceback count > 0 means exposed)
curl -s http://localhost:8000/nonexistent-url-for-debug-test 2>&1 | grep -c 'Traceback\|DEBUG'Check what process owns port 8000 and its bind address
ss -tlnp sport = :8000Basic connectivity check
curl -s http://localhost:8000/ -o /dev/null -w '%{http_code}'Identify the exact process and bind address for port 8000
lsof -i :8000 | grep LISTENpython3 -m http.server 8000 --bind 127.0.0.1
django-admin runserver 0.0.0.0:8000
curl http://localhost:8000/Port 8000 became the Python web development standard through Django's manage.py runserver (2005) which chose it as a round-number alternative to 80. Python's SimpleHTTPServer (now http.server) also defaults to 8000. The convention spread to other frameworks: Hugo (2013), MkDocs (2014), and many API frameworks. Port 8000 is now synonymous with 'development HTTP server' in the Python ecosystem.
How do I run Django safely in production?
Never use runserver in production. Stack: Gunicorn (--bind 127.0.0.1:8000 --workers 4) or uWSGI behind Nginx (443 with TLS). Set DEBUG=False, configure ALLOWED_HOSTS, use a proper SECRET_KEY (not the one in git), enable SecurityMiddleware (HSTS, X-Frame-Options), and serve static files via Nginx/CDN (not Django). Use django-admin check --deploy to audit settings.
Is 'python -m http.server' safe for sharing files locally?
Only on trusted networks and only from a dedicated directory (never ~/). It serves ALL files in the directory tree including hidden files (.env, .git). It has no authentication, no TLS, and logs all requests to stdout. For sharing files: use a dedicated tool like transfer.sh or a temporary presigned S3 URL instead.