Published on

WSGI

WSGI stands for Web Server Gateway Interface. It's a standard interface between web servers and Python web applications or frameworks. It allows you to write web applications in Python that can run on any WSGI-compatible web server.


🔧 How it works (high-level)

  • The web server (e.g., Gunicorn, uWSGI) receives an HTTP request.
  • It forwards the request to your Python app via a WSGI interface.
  • Your Python app returns a response (status, headers, body) through the WSGI interface.
  • The server sends the response back to the client.

📄 WSGI Application Example

def application(environ, start_response):
    status = '200 OK'
    headers = [('Content-Type', 'text/plain')]
    start_response(status, headers)
    return [b"Hello, World!"]
  • environ: A dict with request info (method, path, headers, etc.)
  • start_response: A function used to send status and headers to the server

✅ Why WSGI is useful

  • Standardizes the way Python web apps and servers communicate
  • Lets you run frameworks like Flask, Django, or FastAPI (via ASGI fallback) on WSGI servers
  • Enables switching between servers without changing your app

🔄 WSGI vs ASGI

  • WSGI: Synchronous (traditional apps like Django, Flask)
  • ASGI: Asynchronous + synchronous (supports WebSockets, long polling – for FastAPI, Django Channels)