From 9ac962cc82ef55cf211c0dfa5d18bc5bde27563b Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Mon, 23 Jul 2012 09:32:30 +0100 Subject: Avoid unrecognized content-type message 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 --- nova/api/openstack/wsgi.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'nova/api') diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py index fb25c5caa..e92954711 100644 --- a/nova/api/openstack/wsgi.py +++ b/nova/api/openstack/wsgi.py @@ -140,10 +140,15 @@ class Request(webob.Request): 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 -- cgit