http协议长连接的粘拆包(短链接没有处理沾包的问题,但是会有何时并包的问题)【重点】

netty pb协议设计(jds)【重点】 有netty对http协议长连接粘拆包的概念清晰的处理实践

21-ahttpclient 与TIME_WAIT 客户端close与服务端close  有对http 长连接包长度的理论处理方式的讨论-chunked,content-lenth

24netty(二十)http代理服务器【重点】 中通过自研反向代理服务器实践,对http长连接及浏览器的处理有实践级的研究讨论

短链接同样需要一个机制,比如:http request a被分为3个tcp包,【重要】短链接没有处理沾包的问题,但是会有何时并包的问题

tcp1

    http read

tcp2

    http read

tcp3

    http read

http服务端分3次读,是什么决定了,哪次读之后作出response???

我想,具体可能每家服务器不一样,以netty的HttpObjectDecoder,为例,巨长

https://blog.csdn.net/qq_38397969/article/details/81462846给出了3种方案:

1、客户端告诉服务端我发完了,在发送的那一端(也就是客户端)调用socket.shutdownOutput();这样服务器端就知道文件发送结束了,read方法就会返回-1 —— chunk是其中一种形式,fin包是另一种形式

  24netty(二十)http代理服务器【重点】 中短链接浏览器不阻塞就是fin包的形式,在没有收到fin(close)前,浏览器不知道是否要现在作出响应,即开始渲染html代码

  24netty(二十)http代理服务器【重点】 中长链接使用chunk,浏览器不阻塞就是chunk的形式

本质都是一个约定的报文分隔符

2、发送数据时,在数据首部给定文件长度,当接受完给定长度后手动跳出循环。——content-length

  24netty(二十)http代理服务器【重点】 中长链接添加content-lenth,浏览器不阻塞即是该类型

3、在服务器端设置超时,比如3秒:sotime_out

  目前还没见过,后来java socket模拟http中,有客户端超时读取的情况

也许该读一下tomcat源码,看它是怎么处理的

29java socket模拟http【重点】springboot json post bug,wireshark抓http包 对本文有个实践

6tcp粘包(二)原因、解决方案提炼【重点】 为本文的引出

原文地址:https://www.cnblogs.com/silyvin/p/12197643.html