koa 设置response header字段transfer-encoding为chunked之后客户端收不到响应

发布于 2022-09-11 19:39:59 字数 77 浏览 11 评论 0

koa使用ctx.set设置transfer-encoding为chunked之后,客户端接受不到ctx.body的返回值,烦请各位解答一下,谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沒落の蓅哖 2022-09-18 19:39:59

试了一下, 发现应该是 koa 自动带上了 content-length 导致的.
在chrome中, 不会发生解析失败的问题, 但是在 postman 客户端, 和 node http 模块 get 时, 会发生解析错误.

试了一下, 在 koa 源码, response 文件中,

set(field, val) {
    if (this.headerSent) return;
    if (2 == arguments.length) {
      if (Array.isArray(val)) val = val.map(v => typeof v === 'string' ? v : String(v));
      else if (typeof val !== 'string') val = String(val);
      this.res.setHeader(field, val);
    } else {
      for (const key in field) {
        this.set(key, field[key]);
      }
    }
  },

临时改成了

  set(field, val) {
    if (this.headerSent) return;
    if ((this.header['transfer-encoding'] || this.header['Transfer-Encoding']) && field === 'Content-Length') return  // 有了 transfer-encoding header 就不再添加 content-length
    if (2 == arguments.length) {
    // .....

然后再运行问题中的代码, 用 postman 或者 nodejs http.get 测试, 都能正常返回.
至于, 为什么 koa 要自动带上 content-length 不做判断, 和如何解决这种情况或者说有没有必要解决...希望有知道的大佬补充一下orz

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文