@@ -42,7 +42,8 @@ exports.XMLHttpRequest = function() {
4242 "Accept" : "*/*" ,
4343 } ;
4444
45- var headers = defaultHeaders ;
45+ var headers = { } ;
46+ var headersCase = { } ;
4647
4748 // These headers are not user setable.
4849 // The following are allowed but banned in the spec:
@@ -183,7 +184,7 @@ exports.XMLHttpRequest = function() {
183184 } ;
184185
185186 /**
186- * Sets a header for the request.
187+ * Sets a header for the request or appends the value if one is already set .
187188 *
188189 * @param string header Header name
189190 * @param string value Header value
@@ -199,7 +200,9 @@ exports.XMLHttpRequest = function() {
199200 if ( sendFlag ) {
200201 throw new Error ( "INVALID_STATE_ERR: send flag is true" ) ;
201202 }
202- headers [ header ] = value ;
203+ header = headersCase [ header . toLowerCase ( ) ] || header ;
204+ headersCase [ header . toLowerCase ( ) ] = header ;
205+ headers [ header ] = headers [ header ] ? headers [ header ] + ', ' + value : value ;
203206 } ;
204207
205208 /**
@@ -249,9 +252,8 @@ exports.XMLHttpRequest = function() {
249252 * @return string Returns the request header or empty string if not set
250253 */
251254 this . getRequestHeader = function ( name ) {
252- // @TODO Make this case insensitive
253- if ( typeof name === "string" && headers [ name ] ) {
254- return headers [ name ] ;
255+ if ( typeof name === "string" && headersCase [ name . toLowerCase ( ) ] ) {
256+ return headers [ headersCase [ name . toLowerCase ( ) ] ] ;
255257 }
256258
257259 return "" ;
@@ -332,6 +334,13 @@ exports.XMLHttpRequest = function() {
332334 // Add query string if one is used
333335 var uri = url . pathname + ( url . search ? url . search : "" ) ;
334336
337+ // Set the defaults if they haven't been set
338+ for ( var name in defaultHeaders ) {
339+ if ( ! headersCase [ name . toLowerCase ( ) ] ) {
340+ headers [ name ] = defaultHeaders [ name ] ;
341+ }
342+ }
343+
335344 // Set the Host header or the server may reject the request
336345 headers . Host = host ;
337346 if ( ! ( ( ssl && port === 443 ) || port === 80 ) ) {
0 commit comments