Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Web Server Gateway Interface

From Wikipedia, the free encyclopedia
Calling convention for web servers
"WSGI" redirects here. For the radio station in Springfield, Tennessee, seeWSGI (AM).

TheWeb Server Gateway Interface (WSGI, pronouncedwhiskey[1][2] orWIZ-ghee[3]) is a simplecalling convention forweb servers to forward requests toweb applications orframeworks written in thePython programming language. The current version of WSGI, version 1.0.1, is specified inPython Enhancement Proposal (PEP) 3333.[4]

WSGI was originally specified as PEP-333 in 2003.[5] PEP-3333, published in 2010, updates the specification forPython 3.

Background

[edit]

In 2003, Pythonweb frameworks were typically written against onlyCGI,FastCGI,mod_python, or some other customAPI of a specificweb server.[6] To quote PEP 333:

Python currently boasts a wide variety of web application frameworks, such as Zope, Quixote, Webware, SkunkWeb, PSO, and Twisted Web -- to name just a few. This wide variety of choices can be a problem for new Python users, because generally speaking, their choice of web framework will limit their choice of usable web servers, and vice versa... By contrast, although Java has just as many web application frameworks available, Java's "servlet" API makes it possible for applications written with any Java web application framework to run in any web server that supports the servlet API.

WSGI was thus created as an implementation-neutralinterface between web servers and web applications or frameworks to promote common ground forportable web application development.[4]

Specification overview

[edit]

The WSGI has two sides:

  • theserver/gateway side. This is often running full web server software such asApache orNginx, or is a lightweight application server that can communicate with a webserver, such asflup.
  • the application/framework side. This is a Python callable, supplied by the Python program or framework.

Between the server and the application, there may be one or moreWSGImiddleware components, which implement both sides of the API, typically in Python code.

WSGI does not specify how the Python interpreter should be started, nor how the application object should be loaded or configured, and different frameworks and webservers achieve this in different ways.

WSGI middleware

[edit]

A WSGI middleware component is a Python callable that is itself a WSGI application, but may handle requests by delegating to other WSGI applications. These applications can themselves be WSGI middleware components.[7]

A middleware component can perform such functions as:[7]

  • Routing a request to different application objects based on the targetURL, after changing theenvironment variables accordingly.
  • Allowing multiple applications or frameworks to run side-by-side in the sameprocess
  • Load balancing and remote processing, by forwarding requests and responses over anetwork
  • Performing content post-processing, such as applyingXSLT stylesheets

Examples

[edit]

Example application

[edit]

A WSGI-compatible "Hello, World!" application written inPython:

defapplication(environ,start_response):start_response("200 OK",[("Content-Type","text/plain")])yieldb"Hello, World!\n"

Where:

  • Line 1 defines a function[8] namedapplication, which takes two parameters,environ andstart_response.environ is a dictionary containingCGI environment variables as well as other request parameters and metadata under well-defined keys.[9]start_response is a callable itself, taking two positional parameters,status andresponse_headers.
  • Line 2 callsstart_response, specifying "200 OK" as the HTTP status and a "Content-Type" response header.
  • Line 3 makes the function into agenerator. The body of the response is returned as an iterable ofbyte strings.

Example of calling an application

[edit]

A full example of a WSGI network server is outside the scope of this article. Below is a sketch of how one would call a WSGI application and retrieve its HTTP status line, response headers, and response body, as Python objects.[10] Details of how to construct theenviron dict have been omitted.

fromioimportBytesIOdefcall_application(app,environ):status=Noneheaders=Nonebody=BytesIO()defstart_response(rstatus,rheaders):nonlocalstatus,headersstatus,headers=rstatus,rheadersapp_iter=app(environ,start_response)try:fordatainapp_iter:assert(statusisnotNoneandheadersisnotNone),"start_response() was not called"body.write(data)finally:ifhasattr(app_iter,"close"):app_iter.close()returnstatus,headers,body.getvalue()environ={...}# "environ" dictstatus,headers,body=call_application(app,environ)

WSGI-compatible applications and frameworks

[edit]
This sectionmay containexcessive orirrelevant examples. Please helpimprove it by removingless pertinent examples andelaborating on existing ones.(September 2018) (Learn how and when to remove this message)

Numerousweb frameworks support WSGI:

Currently wrappers are available forFastCGI,CGI,SCGI,AJP (using flup),twisted.web, Apache (usingmod_wsgi ormod_python),Nginx (using ngx_http_uwsgi_module),[27]Nginx Unit (using the Python language module),[28] andMicrosoft IIS (using WFastCGI,[29] isapi-wsgi,[30] PyISAPIe,[31] or anASP gateway).

See also

[edit]

References

[edit]
  1. ^Simionato, Michele (June 11, 2007)."An Introduction to Web Programming with WSGI".
  2. ^Edge, Jake (July 9, 2019)."Mucking about with microframeworks".LWN.
  3. ^Goldberg, Kevin (2016-05-09)."An Introduction to Python WSGI Servers for Performance | AppDynamics".Application Performance Monitoring Blog | AppDynamics. Retrieved2020-08-20.
  4. ^ab"PEP 3333 - Python Web Server Gateway Interface v1.0.1".Python.org. Retrieved2018-04-04.
  5. ^"PEP 333 -- Python Web Server Gateway Interface v1.0".Python.org. Retrieved2018-04-04.
  6. ^"FrontPage - Python Wiki".Python.org. Retrieved2017-01-27.
  7. ^ab"PEP 3333 -- Python Web Server Gateway Interface v1.0.1".Python.org. Retrieved2018-04-04.
  8. ^i.e. "a function, method, class, or an instance with a__call__ method"
  9. ^"PEP 3333 -- Python Web Server Gateway Interface v1.0.1".Python.org. Retrieved2018-04-04.
  10. ^"Creating WSGI Middleware - Alan Christopher Thomas - Minted - PythonKC".YouTube. 2015-08-28.Archived from the original on 2021-12-12. Retrieved2017-01-27.
  11. ^"プエラリアジェルの効果は?".Bobo.digicool.com. Retrieved2017-01-27.
  12. ^"Django without mod_python, and WSGI support | Weblog | Django".Djangoproject.com. 2005-07-18. Retrieved2017-01-27.
  13. ^"wsgi – WSGI server — Eventlet 0.20.1 documentation".Eventlet.net. Retrieved2017-01-27.
  14. ^"Falcon - Bare-metal web API framework for Python". Retrieved2017-10-22.
  15. ^"gevent-fastcgi 1.0.2.1 : Python Package Index".Pypi.python.org. 2015-12-06. Retrieved2017-01-27.
  16. ^"anomaly/prestans: A WSGI compliant REST micro-framework".GitHub.com. Retrieved2017-01-27.
  17. ^"Google Code Archive - Long-term storage for Google Code Project Hosting".Code.google.com. Retrieved2017-01-27.
  18. ^"Pycnic Framework".Pycnic.nullism.com. Retrieved2017-01-27.
  19. ^"theintencity/restlite: Light-weight RESTful server tools in Python".GitHub.com. Retrieved2017-01-27.
  20. ^"Socketify: Bringing Http/Https and WebSockets High Performance servers for PyPy3 and Python3".GitHub.com. Retrieved2025-08-12.
  21. ^"limodou/uliweb: Simple and easy use python web framework".GitHub.com. Retrieved2017-01-27.
  22. ^"waitress documentation".docs.pylonsproject.org. Retrieved2018-09-26.
  23. ^"Welcome to".Web.py. 2009-09-11. Retrieved2017-01-27.
  24. ^"weblayer — weblayer v0.4.3 documentation".Packages.python.org. Retrieved2017-01-27.
  25. ^"Welcome | Werkzeug (The Python WSGI Utility Library)".Werkzeug.pocoo.org. Retrieved2017-01-27.
  26. ^"CalDAV and CardDAV Server - A Simple Calendar and Contact Server".Radicale.org. Retrieved2017-01-27.
  27. ^"Module ngx_http_uwsgi_module".Nginx.org. Retrieved2017-01-27.
  28. ^"Configuration — NGINX Unit".Unit.nginx.org. Retrieved2023-05-04.
  29. ^"Python Tools for Visual Studio - Documentation".Pytools.codeplex.com. Retrieved2017-01-27.
  30. ^"Google Code Archive - Long-term storage for Google Code Project Hosting".Code.google.com. Retrieved2017-01-27.
  31. ^"Python ISAPI Extension for IIS download | SourceForge.net".Pyisapie.sourceforge.net. 2012-04-24. Retrieved2017-01-27.

External links

[edit]
Implementations
IDEs
Topics
Designer
Protocols
Server APIs
Apache modules
Topics
Browser APIs
Web APIs
WHATWG
W3C
Khronos
Others
Topics
Related topics
Retrieved from "https://en.wikipedia.org/w/index.php?title=Web_Server_Gateway_Interface&oldid=1334652312"
Category:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp