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的形式
本质都是一个约定的报文分隔符 netty(二十七)http代理服务器(六)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粘包(二)原因、解决方案提炼【重点】 为本文的引出