前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【nodejs每日一讲】http trick

【nodejs每日一讲】http trick

作者头像
theanarkh
发布2021-01-12 14:42:44
4820
发布2021-01-12 14:42:44
举报
文章被收录于专栏:原创分享原创分享

1 响应

我们知道http响应的时候一般会设置content-length告诉客户端,响应中响应体有多少个字节(如果有响应体的话)。但是很多时候我们在响应的时候,不知道有多少字节需要返回,但又希望不要拿到全部数据的时候才一起返回,而是部分返回,那么这时候我们就无法设置content-length了,那怎么办呢?http协议中有一个头可以支持这个功能。那就是Transfer-Encoding: chunked。chunked模式支持分块返回数据给客户端。但是不管是什么模式,无规矩不成方圆,http协议必须定义http解析器怎么判断响应结束了。下面我们看看chunk模式的时候,协议格式是怎样的。

代码语言:javascript
复制
...
响应头\r\n
\r\n(响应头结束,下面是响应体开始)
长度1\r\n
数据1\r\n
长度2\r\n
数据2\r\n
0\r\n(标记响应体内容结束)
\r\n

下面我们使用nodejs实现一个服务器,看chunk模式是怎么实现的。

代码语言:javascript
复制
const http = require('http')
http.createServer(function(req, res) {
    const { socket } = res;
    // 攒到一起再发送
    socket.cork();
    // 响应行
    socket.write('HTTP/1.1 200 OK');
    socket.write('\r\n');
    // 响应头
    socket.write('Transfer-Encoding: chunked\r\nhello: world\r\n');
    socket.write('\r\n');
    // 响应体
    // 长度,十六进制
    socket.write('5\r\n');
    socket.write('xxxxx\r\n');
    // 长度,十六进制
    socket.write('a\r\n');
    socket.write('yyyyyyyyyy\r\n');
    // chunk结束
    socket.write('0\r\n');
    socket.write('\r\n');
    // 允许发送
    socket.uncork();
    // 关闭连接
    socket.destroy();
}).listen(80);

我们访问该服务器,服务器就会返回对应的数据。

响应头

响应体

了解基本的原理后我们来做一些好玩的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程杂技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档