user1126425
user1126425

Reputation: 2585

Understanding WSGI

I am trying to understand the functionality of WSGI and need some help.

So far I know that it is kind of a middleware between servers and applications, used for interfacing different application frameworks (that reside in the server side) with the application, provided that the framework in question has a WSGI adapter. Continuing the theoretical part, I know that for server to communicate with the application, server calls a callable (that takes two arguments: environment variables and start_response function). Here start_response function is provided by the server (?) and used by the application with a response status and header followed by response body.

I understand little of what I wrote above, so here are newbie questions: 1) What is the general call flow ? Application will provide the server with a callable and then server would invoke the application using that callable and using env_vars and start_response function as arguments?

2) What confuses me the most is that the application is sending the request headers and then it sends the response body as well. What type of request is this ?

Please enlighten me as I am unable to get my head around this stuff.

Thanks!

Upvotes: 13

Views: 2559

Answers (1)

freestyler
freestyler

Reputation: 5444

The call flow is as follow:

  1. The server got a http connection,
  2. server parsed the http request line and headers, read the body,
  3. server populates the environ dict according to the request,
  4. server calls application callable with environ and start_response as arguments,
  5. application callable calls start_response with response status and response headers,
  6. application return response body to the server,
  7. server send the http response to the client.

For your second problem, the request/response is an interface defined by wsgi protocol (e.g. status = '200 OK', response_headers = [('Content-type', 'text/plain')]), not the same thing with http request/response.

You can browse the stand library module wsgiref as reference.

Upvotes: 8

Related Questions