Tags

  • AWS (8)
  • Apigee (3)
  • ArchLinux (5)
  • Array (6)
  • Backtracking (6)
  • BinarySearch (6)
  • C++ (19)
  • CI&CD (3)
  • Calculus (2)
  • Database (1)
  • DesignPattern (43)
  • DisasterRecovery (1)
  • Docker (8)
  • DynamicProgramming (20)
  • FileSystem (11)
  • Frontend (2)
  • FunctionalProgramming (1)
  • GCP (1)
  • Gentoo (6)
  • Git (16)
  • Golang (1)
  • Graph (10)
  • GraphQL (1)
  • Hardware (1)
  • Hash (1)
  • Kafka (1)
  • LinkedList (13)
  • Linux (27)
  • Lodash (2)
  • MacOS (3)
  • Makefile (1)
  • Map (5)
  • Miscellaneous (1)
  • MySQL (21)
  • Neovim (11)
  • Network (72)
  • Nginx (6)
  • Node.js (33)
  • OpenGL (6)
  • PriorityQueue (1)
  • ProgrammingLanguage (9)
  • Python (10)
  • RealAnalysis (20)
  • Recursion (3)
  • Redis (1)
  • RegularExpression (1)
  • Ruby (19)
  • SQLite (1)
  • Sentry (3)
  • Set (4)
  • Shell (4)
  • SoftwareEngineering (12)
  • Sorting (2)
  • Stack (4)
  • String (2)
  • SystemDesign (13)
  • Terraform (2)
  • Tree (24)
  • Trie (2)
  • TwoPointers (16)
  • TypeScript (3)
  • Ubuntu (4)
  • Home

    WSGI

    Published Jun 15, 2025 [  Network  ]

    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)