Ajp13Parser用于解析web服务器传过来的输入流,对于每个AJP连接都有一个对应的Ajp13Parser对象。Ajp13Generator用于产生输出流,并发送给web服务器,对于每个AJP连接都有一个对应的Ajp13Generator对象。
Ajp13Parser有4个状态,分别是STATE_START、STATE_END、STATE_AJP13CHUNK_START、STATE_AJP13CHUNK。
STATE_START是初始化状态,如果Ajp13Parser是这个状态,则是空闲的。在调用Ajp13Parser的reset方法后,会恢复为这个状态。
STATE_END是结束状态,如果Ajp13Parser是这个状态,则代表已处理完一个请求。
转入情况1:如果输入流结束了并且是STATE_AJP13CHUNK_START或STATE_AJP13CHUNK状态时,会转为STATE_END状态。
转入情况2:如果是STATE_AJP13CHUNK_START或STATE_AJP13CHUNK状态,并且已经读入了一个请求的全部内容后,会转为STATE_END状态。
转入情况3:如果在处理一个HTTP请求时,这个HTTP请求没有内容信息时,则转入STATE_END状态。
转入情况4:如果是STATE_AJP13CHUNK_START状态,并且读取了一个空的body数据包后,转入STATE_END状态。
STATE_AJP13CHUNK_START是开始接收body数据状态。
转入情况1:如果在处理一个HTTP请求时,body的长度未知时,转入STATE_AJP13CHUNK_START状态。
转入情况2:如果在处理一个HTTP请求时,有body时,则转入STATE_AJP13CHUNK_START状态。
转入情况3:如果在STATE_AJP13CHUNK状态,并且读取到一个完整的body数据包时,则转入STATE_AJP13CHUNK_START状态。
STATE_AJP13CHUNK是正在读取body数据时的状态。
转入情况:在至少读取了body数据包头后,转入STATE_AJP13CHUNK状态。
jetty中的ajp实现好像有问题啊,body数据包头长度是4啊,jetty中为什么判断为6?需要排查