aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVojta Jina2013-02-14 14:39:55 -0800
committerVojta Jina2013-02-14 14:52:46 -0800
commit288b69a314e9bd14458b6647532eb62aad5c5cdf (patch)
treeab1b1e4eb441b5340780ff44589c3b8186510142
parent2a2123441c2b749b8f316a24c3ca3f77a9132a01 (diff)
downloadangular.js-288b69a314e9bd14458b6647532eb62aad5c5cdf.tar.bz2
fix($http): do not encode special characters `@$:,` in params
encodeURIComponent is too aggressive and doesn't follow http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path segments so we need this test to make sure that we don't over-encode the params and break stuff like buzz api which uses @self. This is has already been fixed in `$resource`. This commit fixes it in a same way for `$http` as well. BREAKING CHANGE: $http does follow RFC3986 and does not encode special characters like `$@,:` in params. If your application needs to encode these characters, encode them manually, before sending the request.
-rw-r--r--src/ng/http.js4
-rw-r--r--test/ng/httpSpec.js13
-rw-r--r--test/ngResource/resourceSpec.js4
3 files changed, 15 insertions, 6 deletions
diff --git a/src/ng/http.js b/src/ng/http.js
index 65d2ee5d..4288e7c1 100644
--- a/src/ng/http.js
+++ b/src/ng/http.js
@@ -818,8 +818,8 @@ function $HttpProvider() {
if (isObject(v)) {
v = toJson(v);
}
- parts.push(encodeURIComponent(key) + '=' +
- encodeURIComponent(v));
+ parts.push(encodeUriQuery(key) + '=' +
+ encodeUriQuery(v));
});
});
return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
diff --git a/test/ng/httpSpec.js b/test/ng/httpSpec.js
index 3b4905f9..600a6a2e 100644
--- a/test/ng/httpSpec.js
+++ b/test/ng/httpSpec.js
@@ -144,7 +144,7 @@ describe('$http', function() {
it('should jsonify objects in params map', inject(function($httpBackend, $http) {
- $httpBackend.expect('GET', '/url?a=1&b=%7B%22c%22%3A3%7D').respond('');
+ $httpBackend.expect('GET', '/url?a=1&b=%7B%22c%22:3%7D').respond('');
$http({url: '/url', params: {a:1, b:{c:3}}, method: 'GET'});
}));
@@ -153,6 +153,17 @@ describe('$http', function() {
$httpBackend.expect('GET', '/url?a=1&a=2&a=3').respond('');
$http({url: '/url', params: {a: [1,2,3]}, method: 'GET'});
}));
+
+
+ it('should not encode @ in url params', function() {
+ //encodeURIComponent is too agressive and doesn't follow http://www.ietf.org/rfc/rfc3986.txt
+ //with regards to the character set (pchar) allowed in path segments
+ //so we need this test to make sure that we don't over-encode the params and break stuff
+ //like buzz api which uses @self
+
+ $httpBackend.expect('GET', '/Path?!do%26h=g%3Da+h&:bar=$baz@1').respond('');
+ $http({url: '/Path', params: {':bar': '$baz@1', '!do&h': 'g=a h'}, method: 'GET'});
+ });
});
diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js
index db6fd402..3f2df284 100644
--- a/test/ngResource/resourceSpec.js
+++ b/test/ngResource/resourceSpec.js
@@ -118,9 +118,7 @@ describe("resource", function() {
});
- // In order to get this passed, we need to fix $http - another breaking change,
- // so I'm gonna submit that as a separate CL.
- xit('should not encode @ in url params', function() {
+ it('should not encode @ in url params', function() {
//encodeURIComponent is too agressive and doesn't follow http://www.ietf.org/rfc/rfc3986.txt
//with regards to the character set (pchar) allowed in path segments
//so we need this test to make sure that we don't over-encode the params and break stuff like