Collating follow-up on the future of WSGI
Cory Benfield <[email protected]> Tue, 19 Jan 2016 16:55:14 +0000
| Newsgroups | gmane.comp.python.web |
|---|---|
| Message-ID | <[email protected]> |
--===============4672455146903303974== Content-Type: multipart/signed; boundary="Apple-Mail=_8E0261DE-C700-40E9-A9A9-3193841B7D10"; protocol="application/pgp-signature"; micalg=pgp-sha256 --Apple-Mail=_8E0261DE-C700-40E9-A9A9-3193841B7D10 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 All, Thanks so much for your feedback to my original request for comments on = the future of WSGI. You provided a ton of really useful feedback: when = printed out on my printer it ended up at about 50 pages of information = that was really engaging reading. I also want to thank you all for = keeping the tone of the discussion so positive. On an topic like this = one it can get tricky and emotionally charged very easily, and you did a = great job of avoiding that problem. I spent a few hours this morning going over your feedback and trying to = extract some common threads. Altogether I believe that most participants = were mostly in agreement over the direction we should take, with a few = outliers in each case. I=E2=80=99d like to summarise what I believe were = the big take-aways from that discussion to confirm that I=E2=80=99ve = understood everyone. I=E2=80=99d also like the members of this SIG to take this opportunity = to discuss these proposals more concretely. Rather than expressing our = sentiments about WSGI and its future more generally, I want people to = critique and offer opinions on *these specific proposals*. The goal here = is to get an understanding of whether these are worth doing, how we need = to prioritise the work, and whether there=E2=80=99s anything we=E2=80=99re= missing. The below is formatted in restructured text for clarity, because it=E2=80=99= s quite a lot of information. Concrete Proposals =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D WSGI ---- Overall, there was strong and fairly unanimous sentiment that WSGI = itself should more or less be left alone. Minor adjustments would be = valuable, and we should pursue them, but the contributors do not believe = that making a substantial revision to WSGI would be adviseable. I therefore propose we revise the WSGI specification to WSGI 1.1 and = then consider it "final". The following points were raised for revising = WSGI. Asynchronous WSGI ~~~~~~~~~~~~~~~~~ This was generally regarded as too substantial a change to shoehorn into = WSGI. Benoit proposed that we could achieve this change by adding a correlator = to WSGI. This would allow servers to associate a given call to = ``write()`` with a specific request/response (most useful in HTTP/2 = where this could correspond to a stream ID). This would then allow WSGI = to transition to a purely callback-based model that could in principle = cohabitate with an async protocol in Python. This proposal is worth highlighting not becuase I think we should pursue = it with our revision of WSGI, but because it's worth considering for any = future specification we come up with. Note also that Graham pointed out = that this would require some careful rethinking of reads from = ``wsgi.input``. Server Push ~~~~~~~~~~~ We can support HTTP/2 server push using Link headers. This could = optionally be supplemented by defining a WSGI extension that provides a = callable for doing server push, which would be a mild improvement over = the Link header approach. A simple proposal for how to do this can = easily be implemented without revising the WSGI specification, and may = not even need to be enshrined in a PEP. However, if we revise the WSGI = PEP we may want to provide a small section that indicates how to add = these headers. Socket Escape Hatch ~~~~~~~~~~~~~~~~~~~ Aside from Benoit, server operators were unanimously dismissive of the = idea of a socket 'escape hatch'. In general it seems like servers would = not be capable of achieving this. I think, therefore, this idea is = unworkable. Chunked Transfer Encoding ~~~~~~~~~~~~~~~~~~~~~~~~~ It would be nice to formalise chunked transfer encoding in WSGI. = Currently there is no way to signal to applications that chunked = transfer encoding is in use by the client, or for the application to = request it from the server. This seemed to be a low priority work item, but if we can make this = enhancement easily then it's worth considering. Bytes and Unicode ~~~~~~~~~~~~~~~~~ Several contributors expressed dissatisfaction for PEP-3333's approach = to headers (namely, Latin-1-encoded Unicode strings), and expressed a = preference for using bytestrings. If we attempt this change, we have a = backward-compatibility concern, so we may have to live with this = decision. Regardless, this should be taken as a warning sign for any other = specification we attempt: more on that later. REQUEST_URI environ variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Multiple contributors expressed an interest in bringing this environment = variable into WSGI directly, making it a required part of the environ = dictionary. An alternative name for this was RAW_URI. Header Joining and Name Normalization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Armin pointed out that PEP-3333 does not mention what should happen to = normalize header names and to join header fields that appear multiple = times in a header block. CGI does not appear to proscribe a behaviour = here either. A revision of PEP-3333 should cover how header names get normalised = (where the answer is basically "like CGI"), and how servers should join = headers together (and logically, how applications can split them). = Mostly this is simply codifying existing practice. Content Lengths ~~~~~~~~~~~~~~~ We should clarify in the new specification that an application that = reads beyond the logical length of the request as given by = CONTENT_LENGTH will have its reads return immediately with the empty = string. Servers are required to police that logic. This is codifying = existing practice, and would also make CONTENT_LENGTH purely advisory. File Wrapper ~~~~~~~~~~~~ Graham identified two specific problems with ``wsgi.file_wrapper``: = specifically, the bad example (which doesn't close the file descriptor = properly), and the larger problem about the overly general specification = of the ``file_wrapper`` as he's blogged about in the past. In general, we may want to identify ``file_wrapper`` as a point of = contention, and consider more fundamental revisions to this under-used = part of the WSGI specification. We may also want to consider simply = dropping it entirely, or pulling it out to an extension specification = rather than leaving it in WSGI 1.1. Websockets and HTTP/2 --------------------- Here, the consensus seemed to be that we should investigate whether we = can come up with WSGI-equivalent APIs for Websockets and HTTP/2. The = goal here would be to allow servers that are interested in offering = richer APIs than WSGI can provide would be able to do so. This is particularly valuable for HTTP/2, which can function totally = fine when used with WSGI but which can have much richer functionality = made available to the application via a different API if that = application requires it. As a SIG we should begin to consider what these APIs should look like. = We should also bear in mind the more advanced asynchronous interfaces = (see below), and ensure that we can easily proxy these APIs to the more = advanced ones, as we can with WSGI to ASGI. Meta API ~~~~~~~~ Graham suggested, along with these more advanced APIs, that we may want = a meta-API or API discovery API that would allow servers to target a = single entry point which then provides access to the callables for WSGI, = the Websockets API, and the HTTP/2 API. We should bear this idea in = mind, but I don't believe we should worry too much about whether we = actually build it or not at this time: it can definitely follow the = prototyping work on the HTTP/2 specific APIs. Asynchronous Python ------------------- There was an overall positive reaction to introducing *something* that = fills the WSGI role for applications that use asynchronous Python = frameworks. Exactly how this would look is unclear at this stage, and this should be = thought of as a long-term goal for this SIG. Amber Brown is clearly = working on an idea, and we also have Andrew's work on ASGI, either of = which could be used as a basis for a future PEP. There was, however, a clear consensus that this should be a clean break = from WSGI: while a server implementing this specification should be able = to call into WSGI applications with a small shim, there is no = requirement that an *application* using this specification should be = callable from a WSGI server. We should absolutely bear this in mind, and we should encourage = specification work to be done here when things are ready, but this is = definitely not going to happen as quickly as the other ideas above. Please let me know what you think of this set of proposals. If = everything is in good shape, I=E2=80=99ll begin working on some of these = items, hopefully with the help of some of the other members of this SIG! Cory --Apple-Mail=_8E0261DE-C700-40E9-A9A9-3193841B7D10 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- iQIcBAEBCAAGBQJWnmpzAAoJEHD+F/imQ+FbinwP/0eM2AD3QUtj9DmCRcM0a+S7 NNluUcfT3zDCiz90yPknmU2VIb0BVDHmM25d8fsP5+emqTDL7BjATiIN+ssNUi3b RYK+dGLHBEWOfpO6MdHmUqmKSfB5jKgM1OmLKee15j8rj5R0qJHSJZGEwWQvXtq+ RqfUBVnLlQqHfsR+1RG0YE3DpsnDSos/4/wdHdAAfP+5aoPLud5ceFcAHc2N52+q 9kltFw98yYe1CNdDTqcwqVA6K3HQRSLnFOzuafjjvrGPrsPn40cXZb3DhF6rXzdu 5qDcXDA83VT2t7OAEm3SoIgC5jPN3RiwgGOToBIoUw/6qJyLBaxBJI5TcsM46yGq /8P3Fr3YgQZyIOwbnWrinINiCnS6RigcnLa1XVwkWjahZ7d1Ab15EhSRs/8JmMxU A4jvSmgBivgulN267JVEzlUthrYyJ2spxUEA2bYIZvkkdnyYNuY4vvSPGqYZ8GAr UT63+cC1sNHr+CqitoU6fGzWY6B6q+WaZkmLmI7mPBp300qUR7e0rYgh/bLUWwiN T6kRz9DDQJnHjiO+F8ci6wUFvyovkSi2olGGAmda4NPuevWdavLkHu2NNMB4DlBQ 3qiV6cdLtSUfVrVn35PtGevR8tzBz189WNYGmQZNFNBjhOGj0/kgWFtsI1UEs2jV SKyMJ/W+AmCkwNtv7/0E =sNNx -----END PGP SIGNATURE----- --Apple-Mail=_8E0261DE-C700-40E9-A9A9-3193841B7D10-- --===============4672455146903303974== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Web-SIG mailing list [email protected] Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: https://mail.python.org/mailman/options/web-sig/gcpw-web-sig%40m.gmane.org --===============4672455146903303974==--