diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index 8b0d5b1538..20be704b63 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -240,11 +240,6 @@ def init_settings(self, jupyter_app, kernel_manager, contents_manager, iopub_data_rate_limit=jupyter_app.iopub_data_rate_limit, rate_limit_window=jupyter_app.rate_limit_window, - # maximum request sizes - support saving larger notebooks - # tornado defaults are 100 MiB, we increase it to 0.5 GiB - max_body_size = 512 * 1024 * 1024, - max_buffer_size = 512 * 1024 * 1024, - # authentication cookie_secret=jupyter_app.cookie_secret, login_url=url_path_join(base_url,'/login'), @@ -780,6 +775,24 @@ def _token_default(self): self._token_generated = True return binascii.hexlify(os.urandom(24)).decode('ascii') + max_body_size = Integer(512 * 1024 * 1024, config=True, + help=""" + Sets the maximum allowed size of the client request body, specified in + the Content-Length request header field. If the size in a request + exceeds the configured value, a malformed HTTP message is returned to + the client. + + Note: max_body_size is applied even in streaming mode. + """ + ) + + max_buffer_size = Integer(512 * 1024 * 1024, config=True, + help=""" + Gets or sets the maximum amount of memory, in bytes, that is allocated + for use by the buffer manager. + """ + ) + @observe('token') def _token_changed(self, change): self._token_generated = False @@ -1385,7 +1398,9 @@ def init_webapp(self): self.login_handler_class.validate_security(self, ssl_options=ssl_options) self.http_server = httpserver.HTTPServer(self.web_app, ssl_options=ssl_options, - xheaders=self.trust_xheaders) + xheaders=self.trust_xheaders, + max_body_size=self.max_body_size, + max_buffer_size=self.max_buffer_size) success = None for port in random_ports(self.port, self.port_retries+1):