It looks like the server is terminating the connection early without sending a full response. I’ve skimmed the docs and I think this is the problem (emphasis added):
Adds a response header to the
headers buffer and logs the accepted request. The HTTP response line
is written to the internal buffer, followed by Server and Date
headers. The values for these two headers are picked up from the
version_string() and date_time_string() methods, respectively. If the
server does not intend to send any other headers using the
send_header() method, then send_response() should be followed by an
Changed in version 3.3: Headers are stored to an internal buffer and
end_headers() needs to be called explicitly.
So you probably just need to add the call to
end_headers. If you were reading an old example (prior to Python 3.3) this wouldn’t have been needed.