Node.js知识 — HTTP 请求与响应如何设置 Cookie 信息

HTTP Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,浏览器下次向同一服务器发起请
首页 新闻资讯 行业资讯 Node.js知识 — HTTP 请求与响应如何设置 Cookie 信息

[[398674]]

HTTP Cookie[1] 是服务器发送到用户浏览器并保存在本地的一小块数据,浏览器下次向同一服务器发起请求时会携带该 cookie  信息到服务器。

本文来自 “Nodejs技术栈” 一位读者的一个问题,“Node.js 发起 HTTP 请求时,怎么携带上 cookie 信息?”

通常我们在浏览器向服务器发起一个请求,浏览器会检查是否有相应的 Cookie(浏览器的安装目录下有个 cookie 文件夹用来存放各个域下设置的  cookie 信息),如有则自动添加到 Request headers 的 cookie 字段中发送到服务器。

这是浏览器的行为会自动帮我们做,那么如果一个 Node.js 做为客户端呢?

根据 RFC 6265[2] 定义的 cookie 工作方式,在 HTTP 请求处理中,服务端可以在 Response headers 中为客户端设置  Set-Cookie 字段。另外,客户端在 HTTP 请求的 Request headers 中以字段 Cookie 的形式将 cookie  信息传递给服务端。

下面我们用 Node.js 提供的系统模块 HTTP[3] 看看如何实现。

这是客户端的请求方法实现,我们可以在 headers 中直接设置 Cookie 字段,也可通过 http.request 返回的 req 对象调用  setHeader() 方法设置。

复制

const http = require('http'); function sendRequest() {   const req = http.request({     method: 'GET',     host: '127.0.0.1',     port: 3010,     path: '/api',     headers: {       Cookie: ['a=111', 'b=222'] // 方式一设置     }   }, res => {     let data = '';     res.on('data', chunk => data += chunk.toString());     res.on('end', () => {       console.log('response body: ', data);       console.log('response cookie: ', res.headers['set-cookie']);     });   });   req.setHeader('Cookie', ['b=222', 'c=333']) // 方式二设置   req.on('error', console.error);   req.end(); } sendRequest();
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

服务端代码如下所示,注意响应设置的是 Set-Cookie 字段。

复制

const http = require('http');  http.createServer((req, res) => {   if (req.url === '/api') {     console.log('received cookie data: ', req.headers.cookie);     res.setHeader('Set-Cookie', ['c=333', 'd=444'])     res.end('Cookie set success!');   } else {     res.end('ok!');   } }).listen(3010);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

同样的当你使用 request、node-fetch 等这些 HTTP 的请求库,其使用是相通的。

参考资料

[1]HTTP Cookie: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

[2]RFC 6265: https://tools.ietf.org/html/rfc6265

[3]HTTP: https://nodejs.org/dist/latest-v14.x/docs/api/http.html

本文转载自微信公众号「Nodejs技术栈」,可以通过以下二维码关注。转载本文请联系Nodejs技术栈公众号。

 

12    2021-05-11 07:45:00    HTTP Node.js Cookie