From 6b90086031d640993d1bcbc17eacdfc46b314262 Mon Sep 17 00:00:00 2001 From: Dan Tao Date: Fri, 20 Dec 2013 16:18:15 -0800 Subject: [PATCH 1/2] set Accept header to */* if raw param is set The (undocumented) raw parameter says to me, "I want to get arbitrary non-JSON data from this URL; please wrap it for me." However if we explicitly set the Accept header to 'application/json' we might get a 406 back from the external service. If the user explicitly set the raw param, it makes sense to accept everything, right? --- lib/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/app.js b/lib/app.js index 8685cc2..d55399d 100644 --- a/lib/app.js +++ b/lib/app.js @@ -46,8 +46,9 @@ app.get('/', function(req, res) { // do proxy // copy headers from the external request, but remove those that node should generate - var externalReqHeaders = u.omit(req.headers, 'accept-encoding', 'connection', 'cookie', 'host', 'user-agent'); - externalReqHeaders.accept = 'application/json'; + var externalReqHeaders = u.omit(req.headers, 'accept-encoding', 'connection', 'cookie', 'host', 'user-agent'), + raw = params.raw; // undocumented, for now + externalReqHeaders.accept = raw ? '*/*' : 'application/json'; request({ uri: apiUrl, @@ -56,7 +57,6 @@ app.get('/', function(req, res) { encoding: 'utf8' }, function(error, response, body){ var callbackName = params.callback || params.jsonp, - raw = params.raw, // undocumented, for now status; if (error){ From db1c1dd386c2de65d501425b2807bf7bc792739c Mon Sep 17 00:00:00 2001 From: Dan Tao Date: Mon, 23 Dec 2013 12:07:55 -0800 Subject: [PATCH 2/2] added test for afeld/jsonp#15 --- test/server_test.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/server_test.js b/test/server_test.js index a2a6dd3..20ae28a 100644 --- a/test/server_test.js +++ b/test/server_test.js @@ -145,4 +145,20 @@ describe('app', function(){ }); }); + + it('should set the Accept header to "*/*" for "raw" requests', function(done){ + var destApp = express(); + destApp.get('/', function(req, res){ + expect(req.headers.accept).to.eql('*/*'); + res.send(''); + }); + var server = http.createServer(destApp); + server.listen(8001, function(){ + + supertest(app) + .get('/') + .query({url: 'http://localhost:8001', raw: true}) + .expect(200, done); + }); + }); });