[FASTCGI] Length Incosistency Between FCGI_RECORD and FCGI_PARAMS
Volkan YAZICI
yazicivo at ttmail.com
Fri Jan 30 07:27:19 EST 2009
Hi,
AFAIU, FCGI_PARAMS are wrapped in FCGI_RECORD data types. (Please
correct me if I am wrong.) And there are four types of FCGI_PARAMS
message formats with variable length headers:
1. {KEY-LEN[1], VAL-LEN[1], KEY[KEY-LEN], VAL[VAL-LEN]}
2. {KEY-LEN[1], VAL-LEN[4], KEY[KEY-LEN], VAL[VAL-LEN]}
3. {KEY-LEN[4], VAL-LEN[1], KEY[KEY-LEN], VAL[VAL-LEN]}
4. {KEY-LEN[4], VAL-LEN[4], KEY[KEY-LEN], VAL[VAL-LEN]}
But an FCGI_RECORD message header format is of fixed length. Now
consider below message:
{VERSION [1],
TYPE[1], // FCGI_PARAMS Type
REQUEST-ID [2],
CONTENT-LEN[2],
PADDING-LEN[1],
RESERVED [1],
CONTENT [CONTENT-LEN], // {KEY-LEN[4],
// VAL-LEN[4],
// KEY [KEY-LEN],
// VAL [VAL-LEN]}
PADDING [PADDING-LEN]}
Whole record length is represented by 2 bytes (maximum 2^(2*8) bytes),
but a key+value length might be representing a block of 8 bytes (maximum
2^(4*8) bytes) in size.
+-----------------------------+
| ### FCGI_RECORD ########### |
| +----------------------------------------------+
| | ### FCGI_PARAMS ############################ |
| +----------------------------------------------+
+-----------------------------+
^ ^ ^
|---- 2^(2*8)=65536 bytes ----| |
|--------------- 2^(4*8)=4294967296 -------------|
How can this be possible? I have read FastCGI specification[1] over and
over again but couldn't find a clue. Would you mind helping me to
clarify this point please?
Regards.
[1] http://www.fastcgi.com/devkit/doc/fcgi-spec.html
More information about the FastCGI-developers
mailing list