nginx的Content-length 和 chunk

nginx 有支持http1.0 和http 1.1。

http1.0 协议是短连接,一般的服务器。一次通信后,连接会close。http 头的域 Connection:close

http1.1 协议对1.0作了扩展。 为了更好利用连接,http1.1 不会立马关闭连接,而是复用连接。

http 头的域 Content-length:  的作用是指定body 的大小。 但Content-length 并不是必须能的。

有两种方案可以解决读取body的问题

1. 对于http1.0 短连接,接写完http data 就close. 这样接受端就可以不用指定content-length。很多服务器回包的时候都这样,不用点http content-length域。

2.使用对于http1.1 有个更优的方案,使用域 Transfer-Encoding: chunked。 这种方式是将数据分段发送。

第二种方式对于大的数据发送,就非常好的。 chunked的模式有自己的格式。需要客户端或浏览器的支持。


上面两个方案偏向2个方面,各有优缺点。

短连接的方式非常明显,就是短连接本身。

chunked的理念先进,但是如果是你自己基于tcp解析http的话,解析chunked 的包会比较复杂。另外一个问题,假如在内网使用http 协议,我知道这个包的数据不会量不会很大。

我不需要chunked来发送。一个包就最很好。当然,这样的场景是你明白的你业务需求。而使用chunked模式的话,很有可能,这个包分head和body 两个包。


这时候,就需要一个折中的办法,既需要简单的解析http和一次性发包。


配合content-length的方法,nginx 提供了一个办法,出于性能的考虑,nginx会尽量使用长连接。

使用http1.0 协议版本,connnection:keep-alive 的方式发送请求,nginx 会以http1.1的方式回包,同时会hold住这个链接,connection:keep-alive

这非常适合自己写tcp 解析http协议的场景。简单又高效。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值