wangzihaogithub / spring-boot-protocol

springboot功能扩充-netty动态协议,可以支持各种网络协议的动态切换(单端口支持多个网络协议).支持mmap,sendfile零拷贝,http请求批量聚合
https://zihaoapi.cn
Apache License 2.0
117 stars 63 forks source link

有关206状态码, PARTIAL_CONTENT的行为 #19

Closed zhangtianxiao closed 2 years ago

zhangtianxiao commented 2 years ago

你的单元测试中没有关于206的代码. 你实现的http在此处表现地有些奇怪. 我的认知, 在http-nio背景下, servlet.NettyOutputStream.write(filechannel, offset, limit), channel代表了bodyStream. 客户端按自己需求对bodyStream做读取, 实操现象, 在chrome控制台观察由video引发的请求, size和time的数值是不正常的, 随着time增大, size不变, 虽然可以正常播放, 进度条亦不受影响可以拖动,

同时发现resp.setHeader("Connection","keep-alive")是无效的, 断点了一下发现当exchange支持keep-alive时, 会忽略nettyHeaders中的keep-alvie头,

你有什么头绪吗.

在此处回复你在上一个issue中的邀请, 我对git pull request的流程并不熟悉, 我会尝试去做的. 我希望你能建立一个该项目专属的qq群, 如果可以的话. 像这个问题, 我可以把我的206实现, 和另一个206表现正常的httpserver的代码发群里, 你得空也方便查阅.

wangzihaogithub commented 2 years ago

可以啊 我建了个QQ群779740988. 你的代码可以发过来看看不, 目前的实现还没考虑206的状态.

resp.setHeader("Connection","keep-alive"), 这个在http/1.1里不用设置, 默认都是开的, 且不需要服务器设置, 所以就没判断. 这里逻辑是与tomcat一致的.

如果在http/1.0里, netty已经实现了, 所以不用考虑这些逻辑

image

wangzihaogithub commented 2 years ago

我测试了一下, 在DefaultServlet里解决了你这个问题, 在2.2.8版本. 过两天就能在maven中央仓库导入到pom.xml了