HTTP协议中的Content-Length

编程知识 更新时间:2023-04-05 05:16:30

Content-Length是什么

Content-Length 是一个实体消息首部,用来指明发送给接受方的消息主体的大小。Content-Length如果存在并且有效地话,则必须和消息内容的传输长度完全一致。否则就会导致异常 (特别地, HTTP1.0中这个字段可有可无)

Content-Length首部指示出报文中实体主体的字节大小。这个大小是包含了所有内容编码的, 比如,对文本文件进行了gzip压缩的话,Content-Length首部指的就是压缩后的大小而不是原始大小。

看下以下几种情况:

Content-Length == 实际长度

const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
  if(req.url === '/') {
    res.setHeader('Content-Type', 'text/plain');
    res.setHeader('Content-Length', 10);
    res.write("helloworld");
  }
});
server.listen(8081, () => {
  console.log("成功启动");
});

Content-Length < 实际长度

res.setHeader('Content-Length', 8);

此时输出结果为 hellowor

那后面的字符哪里去了?实际上在http的响应体中直接被截取了。

Content-Length > 实际长度

如果Content-Length 比 实际长度大,服务端/客户端读取到消息结尾后,会等待下一个字节,自然会无响应直到超时。

res.setHeader('Content-Length', 12);

此时浏览器显示结果:

不确定Content-Length的值怎么办

如果不确定Content-Length的值怎么办,此时我们应该使用Transfer-Encoding:chunked

该字段表示分块传输数据,设置这个字段会自动产生两个效果:

  • Content-Length 字段会被忽略
  • 基于长连接持续推送动态内容

参考资料:

  • 《HTTP权威指南》
  • 用了这么久HTTP, 你是否了解Content-Length和Transfer-Encoding ?

更多推荐

HTTP协议中的Content-Length

本文发布于:2023-04-05 05:16:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/e7fbadbfac0708c944764fe9a9fe99b9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:协议   HTTP   Length   Content

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 44961文章数
  • 14阅读数
  • 0评论数