Wearing my HTTP fanatic hat - I think this is actually an important change to do. Skew like this can cause all sorts of odd behaviours in client libraries.
-Rob On 2 July 2014 13:13, Morgan Fainberg <morgan.fainb...@gmail.com> wrote: > In the endeavor to move from the default deployment of Keystone being > eventlet (in devstack) to Apache + mod_wsgi, I noticed that there was an odd > mis-match on a single set of tempest tests relating to trusts. Under eventlet > a HTTP 204 No Content was being returned, but under mod_wsgi an HTTP 200 OK > was being returned. After some investigation it turned out that in some cases > mod_wsgi will rewrite HEAD requests to GET requests under the hood; this is > to ensure that the response from Apache is properly built when dealing with > filtering. A number of wsgi applications just return nothing on a HEAD > request, which is incorrect, so mod_wsgi tries to compensate. > > The HTTP spec states: "The HEAD method is identical to GET except that the > server must not return any Entity-Body in the response. The metainformation > contained in the HTTP headers in response to a HEAD request should be > identical to the information sent in response to a GET request. This method > can be used for obtaining metainformation about the resource identified by > the Request-URI without transferring the Entity-Body itself. This method is > often used for testing hypertext links for validity, accessibility, and > recent modification.” > > Keystone has 3 Routes where HEAD will result in a 204 and GET will result in > a 200. > > * /v3/auth/tokens > * /v2.0/tokens/{token_id} > * /OS-TRUST/trusts/{trust_id}/roles/{role_id} <--- This is the only one > tested by Tempest. > > The easiest solution is to correct the case where we are out of line with the > HTTP spec and ensure these cases return the same status code for GET and HEAD > methods. This however changes the response status of a public REST API. > Before we do this, I wanted to ensure the community, developers, and TC did > not have an issue with this correction. We are not changing the class of > status (e.g. 2xx to 4xx or vice-versa). This would simply be returning the > same response between GET and HEAD requests. The fix for this would be to > modify the 3 tempest tests in question to expect HTTP 200 instead of 204. > > There are a couple of other cases where Keystone registers a HEAD route but > no GET route (these would be corrected at the same time, to ensure > compatibility). The final correction is to enforce that Keystone would not > send any data on HEAD requests (it is possible to do so, but we have not had > it happen). > > You can see a proof-of-concept review that shows the tempest failures here: > https://review.openstack.org/#/c/104026 > > If this change (even though it is in violation of > https://wiki.openstack.org/wiki/APIChangeGuidelines#Generally_Not_Acceptable > is acceptable, it will unblock the last of a very few things to have Keystone > default deploy via devstack under Apache (and gate upon it). Please let me > know if anyone has significant issues with this change / concerns as I would > like to finish up this road to mod_wsgi based Keystone as early in the Juno > cycle as possible. > > Cheers, > Morgan Fainberg > > > — > Morgan Fainberg > > > > _______________________________________________ > OpenStack-dev mailing list > OpenStack-dev@lists.openstack.org > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev -- Robert Collins <rbtcoll...@hp.com> Distinguished Technologist HP Converged Cloud _______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev