Skip to content

Commit

Permalink
added support for status code 303, tests for 302, 303, 307
Browse files Browse the repository at this point in the history
  • Loading branch information
lfdoherty committed Sep 20, 2012
1 parent 3fb6fc9 commit aa3fbcf
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/XMLHttpRequest.js
Expand Up @@ -383,15 +383,15 @@ exports.XMLHttpRequest = function() {

response = resp;

if(response.statusCode === 302){
if(response.statusCode === 302 || response.statusCode === 307 || response.statusCode === 303){
settings.url = response.headers['location']
var url = Url.parse(settings.url);
host = url.hostname
var newOptions = {
hostname: url.hostname,
port: url.port,
path: url.path,
method: settings.method,
method: response.statusCode === 303 ? 'GET' : settings.method,
headers: headers
}

Expand Down
42 changes: 42 additions & 0 deletions tests/test-redirect-302.js
@@ -0,0 +1,42 @@
var sys = require("util")
, assert = require("assert")
, XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest
, xhr = new XMLHttpRequest()
, http = require("http");

// Test server
var server = http.createServer(function (req, res) {

if(req.url === '/redirectingResource'){
res.writeHead(302, {'Location': 'http://localhost:8000/'})
res.end()
return
}

var body = "Hello World";
res.writeHead(200, {
"Content-Type": "text/plain",
"Content-Length": Buffer.byteLength(body),
"Date": "Thu, 30 Aug 2012 18:17:53 GMT",
"Connection": "close"
});
res.write("Hello World");
res.end();

this.close();
}).listen(8000);

xhr.onreadystatechange = function() {
if (this.readyState == 4) {
assert.equal(xhr.getRequestHeader('Location'), '')
assert.equal(xhr.responseText, "Hello World")
sys.puts("done");
}
};

try {
xhr.open("GET", "http://localhost:8000/redirectingResource");
xhr.send();
} catch(e) {
console.log("ERROR: Exception raised", e);
}
42 changes: 42 additions & 0 deletions tests/test-redirect-303.js
@@ -0,0 +1,42 @@
var sys = require("util")
, assert = require("assert")
, XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest
, xhr = new XMLHttpRequest()
, http = require("http");

// Test server
var server = http.createServer(function (req, res) {

if(req.url === '/redirectingResource'){
res.writeHead(303, {'Location': 'http://localhost:8000/'})
res.end()
return
}

var body = "Hello World";
res.writeHead(200, {
"Content-Type": "text/plain",
"Content-Length": Buffer.byteLength(body),
"Date": "Thu, 30 Aug 2012 18:17:53 GMT",
"Connection": "close"
});
res.write("Hello World");
res.end();

this.close();
}).listen(8000);

xhr.onreadystatechange = function() {
if (this.readyState == 4) {
assert.equal(xhr.getRequestHeader('Location'), '')
assert.equal(xhr.responseText, "Hello World")
sys.puts("done");
}
};

try {
xhr.open("POST", "http://localhost:8000/redirectingResource");
xhr.send();
} catch(e) {
console.log("ERROR: Exception raised", e);
}
44 changes: 44 additions & 0 deletions tests/test-redirect-307.js
@@ -0,0 +1,44 @@
var sys = require("util")
, assert = require("assert")
, XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest
, xhr = new XMLHttpRequest()
, http = require("http");

// Test server
var server = http.createServer(function (req, res) {

if(req.url === '/redirectingResource'){
res.writeHead(307, {'Location': 'http://localhost:8000/'})
res.end()
return
}

assert.equal(req.method, 'POST')

var body = "Hello World";
res.writeHead(200, {
"Content-Type": "text/plain",
"Content-Length": Buffer.byteLength(body),
"Date": "Thu, 30 Aug 2012 18:17:53 GMT",
"Connection": "close"
});
res.write("Hello World");
res.end();

this.close();
}).listen(8000);

xhr.onreadystatechange = function() {
if (this.readyState == 4) {
assert.equal(xhr.getRequestHeader('Location'), '')
assert.equal(xhr.responseText, "Hello World")
sys.puts("done");
}
};

try {
xhr.open("POST", "http://localhost:8000/redirectingResource");
xhr.send();
} catch(e) {
console.log("ERROR: Exception raised", e);
}

0 comments on commit aa3fbcf

Please sign in to comment.