elnode
elnode copied to clipboard
curl: (56) Malformed encoding found in chunked-encoding
Some .org
files fail to render in any browser when served by elnode
. These files export without error, and the rendered html can be validated using http://validator.w3.org/. Only curl
gives a clue about malformed encoding. It might just be that elnode
is doing such a good job of being asynchronous that it tries to write data before it is available.
Tested on Emacs 24.4.1 with Org-mode 8.2.10 and elnode-0.9.9.8.8
, also on Emacs 24.5.1 with Org-mode 8.2.10 and elnode-0.9.9.8.8
(same behaviour for both).
How to reproduce (from emacs -Q
):
- Install
elnode
somewhere. I temporarily moved myemacs.d
and installed from marmalade. - Evaluate this snippet.
~/dotemacs/emacs.org
is cloned from https://github.com/bzg/dotemacs (arbitrary large and public org file).
(require 'elnode)
(defun org2html (src)
(let* ((org-inhibit-startup t)
(visitingp (find-buffer-visiting src))
(work-buffer (or visitingp (find-file-noselect src)))
(html (with-current-buffer work-buffer
(org-export-as 'html nil t nil
'(:html-doctype "html5" :html-html5-fancy t)))))
html))
(defun my-test-handler (httpcon)
"Demonstration function"
(let ((html (org2html "~/dotemacs/emacs.org")))
(elnode-send-html httpcon html)))
(elnode-start 'my-test-handler :port 9999 :host "localhost")
Try to access in the terminal emulator:
~ $ curl localhost:9999
<!DOCTYPE html>
<html>
<head>
<title>bzg .emacs.el file</title>
--- SNIP ---
<p class="date">Created: 2015-07-13 Mon 11:42</p>
<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 24.4.1 (<a href="http://orgmode.org">Org</a> mode 8.2.10)</p>
curl: (56) Malformed encoding found in chunked-encoding
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate<~ $
You will see something like the following in *elnode-server-error*
buffer:
2015-07-13T11:34:35: elnode-http-start: starting HTTP response on *elnode-webserver-localhost:9999* <127.0.0.1:42417>
2015-07-13T11:34:35: elnode-http-send-string *elnode-webserver-localhost:9999* <127.0.0.1:42417> [[<!DOCTY...]]
2015-07-13T11:34:35: elnode-http-send-string *elnode-webserver-localhost:9999* <127.0.0.1:42417> [[]]
2015-07-13T11:34:35: elnode--http-end ending socket *elnode-webserver-localhost:9999* <127.0.0.1:42417>
I see the same behaviour using this, and some of my own files that I don't want to share just yet.
Expected behaviour: same for that of smaller org files. Here's an example ~/test.org
that I used:
#+title: test.org
#+author: Ruben Maher
#+date: <2015-07-13 Mon 09:25:26>
* This is a test to show off =elnode=.
It's a pretty cool webserver.
Re-evaluate my-test-handler
, changing the argument to org2html
:
(defun my-test-handler (httpcon)
"Demonstration function"
(let ((html (org2html "~/test.org")))
(elnode-send-html httpcon html)))
Try to access in a terminal emulator:
~ $ curl localhost:9999
<!DOCTYPE html>
<html>
<head>
<title>test.org</title>
--- SNIP ---
<p class="date">Created: 2015-07-13 Mon 11:48</p>
<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 24.4.1 (<a href="http://orgmode.org">Org</a> mode 8.2.10)</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>~ $
No problem. It renders correctly in a web browser. *elnode-server-error*
now shows:
2015-07-13T11:48:59: elnode-http-start: starting HTTP response on *elnode-webserver-localhost:9999* <127.0.0.1:44466>
2015-07-13T11:48:59: elnode-http-send-string *elnode-webserver-localhost:9999* <127.0.0.1:44466> [[<!DOCTY...]]
2015-07-13T11:48:59: elnode-http-send-string *elnode-webserver-localhost:9999* <127.0.0.1:44466> [[]]
2015-07-13T11:48:59: elnode--http-end ending socket *elnode-webserver-localhost:9999* <127.0.0.1:44466>