NEWS
UNSOLVED Flot mit vielen Linien / node.js Header-Size
-
Ich habe in Flot ein Diagramm mit 12 Linien bzw. Datenpunkten. Wenn ich eine 13. hinzufüge, dann wird kein Diagramm erstellt. Ich erhalte eine leeres Fenster. Der Server liefert den HTTP Response "400 Bad Request".
Ich bin da nicht der einzige: https://github.com/ioBroker/ioBroker.flot/issues/57
Ich gehe sehr stark davon aus, dass das Problem entstanden ist, weil in node.js die Default-max-http-header-size von 80 KB auf 8 KB verringert wurde (aus Sicherheitsgründen). Und die Url bzw. die Querystring-Parameter sind teil dieses Headers. Der Fix wurde auch auf alte Node-Versionen backported.
Nachzulesen z.b. auch hier: https://github.com/nodejs/node/issues/24692
Mittlerweile ist es möglich, die Max-Header-Size für node.js zu setzen.
z.B. mit Commandozeilen-Parameter. Dann kann man sich die Header-Size ausgeben lassen
node --max-http-header-size=16384 require("http").maxHeaderSize Ctrl-C, Ctrl-C
Gibt es eine Möglichkeit zu konfigurieren, dass node.js für ioBroker mit dieser Kommandozeile gestartet wird?
Alternativ gibt es auch die Möglichkeit die max-http-header-size per Environment-Variable "NODE_OPTIONS" zu setzen.
Leider bin ich kein Linux-Experte und mit meinem Raspberry PI auch nicht weitergekommen. Ich habe es zwar mittlerweile geschafft, dass bei
sudo -u iobroker node
oder
sudo node
jeweils auch die 16 KB gelten.
Dazu habe ich die Environment-Variable in /etc/environment angelegt und in /etc/sudoers Defaults env_keep += "NODE_OPTIONS" hinzugefügt, damit die nicht gelöscht werden (keine Ahnung ob das geschickt ist).
Die Flot-Grafiken mit längerer Url funktionieren trotzdem noch nicht. Kann es sein, dass beim Aufruf von node für ioBroker /Flot die Environment-Variablen gar nicht vorhanden sind? Oder liege ich komplett am Holzweg?
Wenn nicht, könnte man ein Setting einführen, mit dem man die max-http-header-size für node setzen kann?