Re: [nodejs] HTTP Response Headers - need to send duplicate headers

275 views
Skip to first unread message

Michael Schoonmaker

unread,
Oct 4, 2012, 10:13:15 PM10/4/12
to nod...@googlegroups.com
Use an Array in setHeader: http://nodejs.org/api/http.html#http_response_setheader_name_value

On Thu, Oct 4, 2012 at 1:02 PM, dran yab <dra...@gmail.com> wrote:

I am attempting to write RFC-6455 compliant websockets server is node.js and in order for this to work, node.js must allow me to send some duplicated response headers.



Here are the headers I need to send:
       
        'Connection: Upgrade',
        'Sec-WebSocket-Accept: ACCEPT_STRING,
        'Server: www.safepeers.com',
        'Access-Control-Allow-Credentials: true',
        'Access-Control-Allow-Headers: content-type',
        'Access-Control-Allow-Headers: authorization',
        'Access-Control-Allow-Headers: x-websocket-extensions',
        'Access-Control-Allow-Headers: x-websocket-version',
        'Access-Control-Allow-Headers: x-websocket-protocol',

        'Sec-WebSocket-Origin: http://192.168.1.122',

Note above, the 'Access-Control-Allow-Headers' is defined 5 times above with each instance containing a different value.

When using "response.writeHead(200,my_header_above)", node.js sends most above headers normally, except 'Access-Control-Allow-Headers:...' headers, it only sends one instance (the last one) instead of all 5.  Presumably because the duplicated header is simply over-written with each subsequent variation in the list.

(I know there are libs already written to support websockets for node.js, but I need to write this one for a special custom application in which the currently available websocket libs cannot be used.)

So, is there any way in node.js to send this header 5 times, as it is defined above? 

Below is a working example of the code I used to discover this perceived limitation:

// BEGINNINGS OF A WEBSOCKETS SERVER

var aRHEADER = new Array();
var HTTP = require('http');
var ACCEPT_STRING = 'acceptstring';
var IP = '192.168.1.1';
var PORT = '80';

HTTP.createServer(function (request , response) {
   var response_data;
   response_data = "Hello world";
   set_response_header(response_data)
   response.writeHead(200,aRHEADER);
   response.write(response_data);
   response.end();
}).listen(PORT,IP);

console.log('Server listening on: IP:'+IP+') PORT:'+PORT);

function set_response_header(resp_data) {
    
    aRHEADER = {
        'Upgrade': 'WebSocket',
        'Connection': 'Upgrade',
        'Sec-WebSocket-Accept': ACCEPT_STRING,
        'Server': 'www.safepeers.com',
        'Access-Control-Allow-Credentials': 'true',
        'Access-Control-Allow-Headers': 'content-type',
        'Access-Control-Allow-Headers': 'authorization',
        'Access-Control-Allow-Headers': 'x-websocket-extensions',
        'Access-Control-Allow-Headers': 'x-websocket-version',
        'Access-Control-Allow-Headers': 'x-websocket-protocol',

        'Sec-WebSocket-Origin': 'http://192.168.1.122',
        'Sec-WebSocket-Location': 'ws://192.168.1.122:5222',
        'Content-Length' : resp_data.length
    };
}
//end of code


--
Job Board: http://jobs.nodejs.org/
Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nod...@googlegroups.com
To unsubscribe from this group, send email to
nodejs+un...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply all
Reply to author
Forward
0 new messages