Почему wsgiref.simple_server сообщает о типе содержимого запроса как 'text / plain', в то время как ни один не был отправлен? - PullRequest
0 голосов
/ 08 мая 2011

Выходные данные client.py: text/plain, хотя заголовок типа содержимого не был отправлен на сервер.
Почему?

# ---------------------------------------------- server.py
from wsgiref.simple_server import make_server

def simple_app(environ, start_response):
    print environ.get('CONTENT_TYPE')
    start_response('200 OK', [])
    return []

make_server('localhost', 88, simple_app).serve_forever()

# ---------------------------------------------- client.py
import subprocess
import urllib2

p = subprocess.Popen(['python', '-u', 'server.py'])
req = urllib2.Request('http://localhost:88', headers={})
assert not req.has_header('content-type')
urllib2.urlopen(req).read()
p.terminate()

1 Ответ

1 голос
/ 08 мая 2011

Тип text/plain является значением по умолчанию для MIME, в разделе 5.2 Тип содержимого по умолчанию .

WSGI simple_server использует BaseHTTPRequestHandler, который, в свою очередь, использует класс mimetools.Message для анализа заголовков, отправленных клиентом - здесь он устанавливает значение по умолчанию:

# mimetools.py

class Message(rfc822.Message):

    def parsetype(self):
        str = self.typeheader
        if str is None:
            str = 'text/plain'
...