Shubhansh Shubhansh - 8 months ago 68
Node.js Question

Why cookies and set-cookie headers can't be set while making xmlhttprequest using setRequestHeader?

I was wondering why one cannot set cookie headers using setRequestHeader. Is there any specific reason or just that they are added by browser itself, so these headers are disabled? Is there any security issue?


I am working on node.js and used the

module. Following is the test code:

var xhr = new XMLHttpRequest();'GET', url, true);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', "key=value");

Here I need to set cookie-header as
node.js' xmlhttprequest
do not explicitly adds cookie-header(as browsers do). When trying to do so,
gives error "
Refused to set unsafe header

Though I have found a patch and successfully able to send the cookie-header. But was wondering why it was disabled to set cookie-header? Where-ever I read, found that it is required for data-integrity and security, but what security can be breached in this case, is mentioned no where. I want to evaluate if, this data-integrity problem is valid for node.js application as well if I go with my patch.


I am sure you would have gone through the working draft and found

The above headers are controlled by the user agent to let it control those aspects of transport.

Firstly we need to understand, These are standards working as guidelines for interoperability of functions between different browsers. It's not mandated for the browser and hence browsers do have different level of adherence to this standard for different reasons.

Secondly, Technically speaking you can emulate a user agent , treat your program as the browser and can very well set those values as per mentioned standards.

Finally, the intent of disallowing overwriting of Headers or setting up headers for certain fields like Content-Length , Cookie ethos the secure design approach. It is to discourage or at least try to discourage HTTP Request smuggling.