http server response 客户端报出ERR_INVALID_CHUNKED_ENCODING
发布于 3个月前 作者 LEOxiaoD 455 次浏览 来自 问答

我先这样写

  fs.createReadStream(p).pipe(res);

没有问题,但是

  var readable = fs.createReadStream(p);
  readable.on("data", function(data){
      res.write(data);
  });
  readable.on("end", function(){
      // write response head
      res.writeHead(200, {
          "Content-Type": "text/html",
          "Transfer-Encoding": "chunked"
      });
      res.end();
  });
  readable.on("error", function(){
      res.statusCode = 500;
      res.end("500 Internal Error");
  });

这样的话客户端就报出ERR_INVALID _CHUNKED_ENCODING 怎么回事呢?

8 回复

加了个buffer 问题没有了 谁能解释下是为什么吗 谢啦

  var readable = fs.createReadStream(p);
  var buffer = new Buffer("");
  
  readable.on("data", function(data){
      // res.write(data);
      buffer = Buffer.concat([buffer, data]);
  });
  
  readable.on("end", function(){
      // write response head
      res.writeHead(200, {
          "Content-Type": "text/html",
          "Transfer-Encoding": "chunked"
      });
      res.end(buffer);
  });
  
  readable.on("error", function(){
      res.statusCode = 500;
      res.end("500 Internal Error");
  });

var readstream = fs.createReadStream(filepath,{encoding:’binary’}); res.write(data,’binary’); res.end()

@MiguelValentine 这样写好像也会 ERR_INVALID _CHUNKED_ENCODING

ON(data)会被多次触发。这么写

  var datax='';
  var readable = fs.createReadStream(p,'binary');
  readable.on("data", function(data){
      datax +=data;
  });
  
  readable.on("end", function(){
      // write response head
      res.writeHead(200, {"Content-Type": "text/html" });
      res.write(datax,'binary');
      res.end();
  });
  
  readable.on("error", function(){
      res.statusCode = 500;
      res.end("500 Internal Error");
  });

@MiguelValentine 恩 在第一条回复里我自己解决了这个问题 但是我想知道为什么要加个buffer,然后在end的时候一起传给浏览器

因为那个不能执行的代码是先发送响应的主体再发送的响应头,这个是不正确的,应该要先发送响应头再发送响应主体。

回到顶部