Modificación de encabezados de request en XMLHttpRequest

He creado un interceptor de llamada ajax para escuchar XMLHttpRequests.

Me gustaría modificar los encabezados de request del XHR. Por alguna razón, solo puedo cambiarlos en XMLHttpRequest.send() . ¿Es temprano para modificarlos en XMLHttpRequest.open() ? Lanza la exception que pegué en el código siguiente.

Entonces, ¿por qué me sale un error?

 (function (open) { XMLHttpRequest.prototype.open = function () { this.setRequestHeader('foo', 'bar'); // InvalidStateError: An attempt was made to // use an object that is not, or is no longer, usable open.apply(this, arguments); }; })(XMLHttpRequest.prototype.open); (function (send) { XMLHttpRequest.prototype.send = function () { this.setRequestHeader('foo', 'bar'); // OK send.apply(this, arguments); }; })(XMLHttpRequest.prototype.send); for(var i = 0; i < 3; i++){ var rnd = Math.round(Math.random()*3+1), httpRequest = new XMLHttpRequest(); httpRequest.onreadystatechange = function () { }; httpRequest.open('GET', '/echo/json?delay=' + rnd); httpRequest.send(); } 

http://jsfiddle.net/zrZ3a/2/

Qué pasa si cambias:

 this.setRequestHeader('foo', 'bar'); open.apply(this, arguments); 

Llegar:

 open.apply(this, arguments); this.setRequestHeader('foo', 'bar'); 

¿Funciona entonces?