]> granicus.if.org Git - ejabberd/commit
Optimize HTTP requests memory usage
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Mon, 14 May 2018 16:30:21 +0000 (19:30 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Mon, 14 May 2018 16:39:58 +0000 (19:39 +0300)
commit063737e4f5158a52abde4388fa51a6a68ddcae51
treeb28bd10ed7bf80adc3264669cf1c2777510ee8cb
parentcb3bb710bd11ee721a044eecfbf5436d563bf449
Optimize HTTP requests memory usage

Due to historical reasons, ejabberd loads the whole file/data
into the memory when serving an HTTP request. This is now improved:

1) For GET requests ejabberd uses sendfile(2) if the underlying
   connection is HTTP and falls back to read/write loop with 64kb
   buffer for HTTPS connections. This type of requests are handled
   by mod_http_fileserver, mod_http_upload, ejabberd_captcha, etc
2) POST requests are now limited to 20Mb and are fully downloaded
   into the memory for further processing (by ejabberd_web_admin,
   mod_bosh, etc)
3) PUT requests (e.g. for mod_http_upload) are handled by read/write
   loop with 64kb buffer
include/ejabberd_http.hrl
src/ejabberd_http.erl
src/ejabberd_http_ws.erl
src/ejabberd_websocket.erl
src/mod_http_fileserver.erl
src/mod_http_upload.erl