Skip to content

Commit

Permalink
Avoid unrecognized content-type message
Browse files Browse the repository at this point in the history
Fixes bug #904473

If the client does not include a Content-type header in its request
(which is normal for e.g. GET and DELETE) then eventlet will pass us
'text/plain'.

Because 'text/plain' isn't one of our supported request content types
we log:

  Unrecognized Content-Type provided in request

This can be an annoying red-herring for people debugging issues.

The reason that eventlet defaults to text/plain is because it uses
the mimetools.Message.gettype() method:

  Message.gettype()
    Return the message type [..] as specified in the Content-Type
    header. If no such header exists, return 'text/plain'.

The wsgiref web server has the same behavior, whereas mod_wsgi will
pass no content-type and twisted will pass an empty string.

Make our code more robust by treating the empty string or text/plain
as if no content-type header was supplied.

Change-Id: Ide117c807db0dc0f5cbe974788b604b5e236800a
  • Loading branch information
markmc committed Jul 23, 2012
1 parent c94cbe2 commit 9ac962c
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions nova/api/openstack/wsgi.py
Expand Up @@ -140,10 +140,15 @@ def get_content_type(self):
if not "Content-Type" in self.headers:
return None

allowed_types = SUPPORTED_CONTENT_TYPES
content_type = self.content_type

if content_type not in allowed_types:
# NOTE(markmc): text/plain is the default for eventlet and
# other webservers which use mimetools.Message.gettype()
# whereas twisted defaults to ''.
if not content_type or content_type == 'text/plain':
return None

if content_type not in SUPPORTED_CONTENT_TYPES:
raise exception.InvalidContentType(content_type=content_type)

return content_type
Expand Down

0 comments on commit 9ac962c

Please sign in to comment.