Skip to content
Permalink
Browse files

Fixes #8245. Ajax now ensures header names are capitalized so that no…

…n-compliant xhr implementations don't override them.
  • Loading branch information
jaubourg committed Feb 11, 2011
1 parent 3a1d7a3 commit f2e0ae1a3932d6089853e8c0eed6ecb446610c00
Showing with 13 additions and 10 deletions.
  1. +11 −8 src/ajax.js
  2. +2 −2 src/ajax/xhr.js
@@ -15,6 +15,7 @@ var r20 = /%20/g,
rselectTextarea = /^(?:select|textarea)/i,
rspacesAjax = /\s+/,
rts = /([?&])_=[^&]*/,
rucWord = /(^|\-)([a-z])/g,
rurl = /^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,

// Keep a copy of the old load method
@@ -400,8 +401,10 @@ jQuery.extend({

// Caches the header
setRequestHeader: function( name, value ) {
if ( state === 0 ) {
requestHeaders[ name.toLowerCase() ] = value;
if ( !state ) {
requestHeaders[ name.toLowerCase().replace( rucWord, function( _, $1, $2 ) {

This comment has been minimized.

Copy link
@jitter

jitter Feb 11, 2011

Contributor

Maybe pull out the function?

This comment has been minimized.

Copy link
@jaubourg
return $1 + $2.toUpperCase();
} ) ] = value;
}
return this;
},
@@ -428,7 +431,7 @@ jQuery.extend({

// Overrides response content-type header
overrideMimeType: function( type ) {
if ( state === 0 ) {
if ( !state ) {
s.mimeType = type;
}
return this;
@@ -649,28 +652,28 @@ jQuery.extend({

// Set the correct header, if data is being sent
if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
requestHeaders[ "content-type" ] = s.contentType;
requestHeaders[ "Content-Type" ] = s.contentType;
}

// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
if ( s.ifModified ) {
ifModifiedKey = ifModifiedKey || s.url;
if ( jQuery.lastModified[ ifModifiedKey ] ) {
requestHeaders[ "if-modified-since" ] = jQuery.lastModified[ ifModifiedKey ];
requestHeaders[ "If-Modified-Since" ] = jQuery.lastModified[ ifModifiedKey ];
}
if ( jQuery.etag[ ifModifiedKey ] ) {
requestHeaders[ "if-none-match" ] = jQuery.etag[ ifModifiedKey ];
requestHeaders[ "If-None-Match" ] = jQuery.etag[ ifModifiedKey ];
}
}

// Set the Accepts header for the server, depending on the dataType
requestHeaders.accept = s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
requestHeaders.Accept = s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
s.accepts[ "*" ];

// Check for headers option
for ( i in s.headers ) {
requestHeaders[ i.toLowerCase() ] = s.headers[ i ];
jqXHR.setRequestHeader( i, s.headers[ i ] );

This comment has been minimized.

Copy link
@jitter

jitter Feb 11, 2011

Contributor

Shouldn't the loop be moved inside the setRequestHeader function to save function calls?

This comment has been minimized.

Copy link
@jaubourg

jaubourg Feb 12, 2011

Author Member

The method is published on the jqXHR object ;)

}

// Allow custom headers/mimetypes and early abort
@@ -96,8 +96,8 @@ if ( jQuery.support.ajax ) {
// Not set for crossDomain requests with no content
// (see why at http://trac.dojotoolkit.org/ticket/9486)
// Won't change header if already provided
if ( !( s.crossDomain && !s.hasContent ) && !headers["x-requested-with"] ) {
headers[ "x-requested-with" ] = "XMLHttpRequest";
if ( !( s.crossDomain && !s.hasContent ) && !headers["X-Requested-With"] ) {
headers[ "X-Requested-With" ] = "XMLHttpRequest";
}

// Need an extra try/catch for cross domain requests in Firefox 3

0 comments on commit f2e0ae1

Please sign in to comment.
You can’t perform that action at this time.