]> source.dussan.org Git - jquery.git/commitdiff
Fix #12637: restore 1.8.1 ajax crossDomain logic. Close gh-944.
authorRichard Gibson <richard.gibson@gmail.com>
Wed, 3 Oct 2012 12:26:01 +0000 (08:26 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Thu, 4 Oct 2012 01:07:50 +0000 (21:07 -0400)
src/ajax.js
test/unit/ajax.js

index 5e1fb2d9433e81ad34a60126678e0e842bb23031..2be654a85f4e83302ea70ab51c06b106f661e43d 100644 (file)
@@ -580,9 +580,12 @@ jQuery.extend({
 
                // A cross-domain request is in order when we have a protocol:host:port mismatch
                if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() ) || false;
-                       s.crossDomain = parts && ( parts.join(":") + ( parts[ 3 ] ? "" : parts[ 1 ] === "http:" ? 80 : 443 ) ) !==
-                               ( ajaxLocParts.join(":") + ( ajaxLocParts[ 3 ] ? "" : ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) );
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
                }
 
                // Convert data if not already a string
index 1345eae3a73b51f15bf312791c4659d2a870b199..d78bca656fd37e24d66b515c5d5605f97260aa80 100644 (file)
@@ -511,12 +511,22 @@ test(".ajax() - hash", function() {
 
 test("jQuery ajax - cross-domain detection", function() {
 
-       expect( 6 );
+       expect( 7 );
 
        var loc = document.location,
+               samePort = loc.port || ( loc.protocol === "http:" ? 80 : 443 ),
                otherPort = loc.port === 666 ? 667 : 666,
                otherProtocol = loc.protocol === "http:" ? "https:" : "http:";
 
+       jQuery.ajax({
+               dataType: "jsonp",
+               url: loc.protocol + "//" + loc.host + ":" + samePort,
+               beforeSend: function( _ , s ) {
+                       ok( !s.crossDomain , "Test matching ports are not detected as cross-domain" );
+                       return false;
+               }
+       });
+
        jQuery.ajax({
                dataType: "jsonp",
                url: otherProtocol + "//" + loc.host,