Python 3 (before 3.6) is affected by outstanding issue 24291: https://bugs.python.org/issue24291 In Python 3.6 the issue is gone thanks to this patch: https://bugs.python.org/issue26721 The base StreamRequestHandler class does not properly deal with raw IO output streams. This affects most HTTP servers that use it, including werkzeug. It causes large HTTP responses to be truncated when the output socket is unbuffered and in non-blocking mode. This is the case in multi-process mode (workers > 0) due to the socket timeout configured to avoid worker deadlocks. Typically, large file downloads (2MB+) and large JSON responses will be truncated and cause corrupted files or errors on the client side. As a workaround, we turn on the buffering on the output stream by default in multi-process mode (it is already turned on for the input stream) when running on Python 3.5. See also the socket.makefile() method and the docstring of `socketserver.StreamRequestHandler` at https://github.com/python/cpython/blob/dcb101e7f078f12fc3d2bf1730410798a880bfe3/Lib/socketserver.py#L707 Fixes #20158 opw-777120