Apache中的AJP协议

Apache中的AJP协议_第1张图片AJP 协议是定向包(面向包)协议,采用二进制形式代替文本形式,以提高性能。Web Server一般维持和Web Container的多个TCP Connecions,即TCP连接池,多个request/respons循环重用同一个Connection。但是当Connection被分配(Assigned)到某个请求时,该请求完成之前,其他请求不得使用该连接。

Tcp Connection 具有两种状态:

(1). Idle(空闲)
没有请求正使用该连接。
(2). Assigned(已分派)
当前连接正在处理某个请求.
一旦一个连接被分配给一个特定的请求,在连接上发送的基本请求信息是高度压缩的。在这点, SERVLET 容器大概准备开始处理请求,当它处理的时候,它能发回下面的信息给 WEB服务器


SEND_HEADERS

发送一组头到浏览器。

SEND_BODY_CHUNK

发送一块主体数据到浏览器。

GET_BODY_CHUNK

从请求获得下一个数据如果还没有全部传输完,如果请求内容的包长度非常大或者长度不确定,这是非常必要的。例如上载文件。注意这和HTTP的块传输没有关联。

END_RESPONSE

结束请求处理循环。

数据类型:

AJP协议中包括四种数据类型:Byte, Boolean, Integer and String.

Byte: 一个字节

Boolean: 一个字节,1 = true, 0 = false

Integer:两个字节,无符号整数,高位字节在前。

String:可变字符串,最大长度为2^16. 字符串的前而会有二个字节(Integer型)表示字符串的长度,-1表示null。字符串后面会跟上终结符”\0”,而且字符串长度不包括这个终结符。


Apache中的AJP协议_第2张图片

更多的请求跳转中的抓包例子 可以看:http://guojuanjun.blog.51cto.com/277646/688559/




你可能感兴趣的:(Apache中的AJP协议)