Hallo Email,
Der Default für den Enctype ist application/x-www-form-urlencoded
Das ist der Default für das enctype-Attribut des Form-Elements. XMLHttpRequest tickt anders.
Jeder RFCkonforme Parser nimmt daher in solchen Fällen den Default an
Der Default für das HTTP Protokoll - wenn der Content-Type Header fehlt - ist gemäß RFC2616 application/octet-stream, und HTTP Receivern wird es erlaubt, den Inhalt zu beschnuppern um auf eine bessere Idee zu kommen.
Welchen RFC hast Du jetzt gemeint?
xhr.send('x=Y&a=b');
(setzt) spontan Content-Type: text/plain; charset=utf-8 (...), das natürlich 1. Blödsinn ist
Nein, das ist kein Blödsinn. Du sendest einen String (Web IDL Typ USVString). Der Browser verhält sich damit gemäß der Spec, siehe 4.5.6 send() und 5.2 Body mixin.
Dass die send-Methode den Inhalt eines Strings beschnuppert und daraus einen Content-Type errät, gestattet die Spec nicht.
Wenn Du urlencoded willst, ohne selber den Content-Type zu setzen, dann sende ein URLSearchParams Objekt. Das wird Spec-gemäß mit dem von Dir gewünschten Content-Type gesendet.
Aber wenn Du schon den urlencoded String handgeschnitzt hast, dann mach Dir aus den Spänen auch noch einen Presskuchen in application/x-www-form-urlencoded
Form. Das fällt dann in der Library, die das hoffentlich sauber kapselt, auch nicht mehr ins Gewicht.
Rolf
sumpsi - posui - clusi