web服务器的域名格式(超详解读web服务器知识)(15/21)

来源:国外服务器 在您之前已被浏览:1 次
导读:目前正在解读《web服务器的域名格式(超详解读web服务器知识)(15/21)》的相关信息,《web服务器的域名格式(超详解读web服务器知识)(15/21)》是由用户自行发布的知识型内容!下面请观看由(国外主机 - www.2bp.net)用户发布《web服务器的域名格式(超详解读web服务器知识)(15/21)》的详细说明。
笨笨网美国主机,w ww.2 b p .n e t

typedef struct fastcgi_header { uint8 version; uint8 type; uint16 reqid; uint16 contlen; uint8 padding; uint8 reserved;} FcgiHeader, fcgi_header_t;

上面定义的协议头格式中,version版本号1个字节,缺省值为1,type为PDU类型1个字节,共计定义了10种类型,reqid为PDU的序号,两字节BigEndian整数,contlen是PDU消息体的内容长度,两字节BigEndian整数,1字节的padding是PDU消息体不是8字节的倍数时,需要补齐8字节对齐所填充的字节数,保留1字节。

其中PDU类型共有十种,分别定义如下:

/* Values for type component of FCGI_Header */#define FCGI_BEGIN_REQUEST 1#define FCGI_ABORT_REQUEST 2#define FCGI_END_REQUEST 3#define FCGI_PARAMS 4#define FCGI_STDIN 5#define FCGI_STDOUT 6#define FCGI_STDERR 7#define FCGI_DATA 8#define FCGI_GET_VALUES 9#define FCGI_GET_VALUES_RESULT 10#define FCGI_UNKNOWN_TYPE 11#define FCGI_MAXTYPE (FCGI_UNKNOWN_TYPE)

其中从Web服务器发送给CGI服务器的PDU类型为:BEGIN_REQUEST、ABORT_REQUEST、PARAMS、STDIN、GET_VALUES等,从CGI服务器返回给Web服务器的PDU类型为:END_REQUEST、STDOUT、STDERR、GET_VALUES_RESULT等。

根据PDU type值,PDU消息体格式也都不一样,分别定义为:

typedef struct { uint8 roleB1; uint8 roleB0; uint8 flags; uint8 reserved[5];} FCGI_BeginRequest;/* Values for role component of FCGI_BeginRequest */#define FCGI_RESPONDER 1#define FCGI_AUTHORIZER 2#define FCGI_FILTER 3

BEGIN_REQUEST是发送数据到CGI服务器时,第一个必须发送的PDU。其中的角色role是两个字节组成,高位在前、低位在后,一般情况role值为RESPONSER,即要求CGI服务器充当Responder来处理后续的PARAMS和STDIN请求数据。字段flags是指当前连接keep-alive还是返回数据后立即关闭。

第二个需发送到CGI服务器的PDU是PARAMS,其格式是由FcgiHeader加上带有长度的name/value对组成,PDU消息体格式如下:

typedef struct { uint8 namelen; //namelen < 0x80 uint32 lnamelen; //namelen >= 0x80 uint8 valuelen; //valuelen < 0x80 uint32 lvaluelen; //valuelen >= 0x80 uint8 * name; //[namelen]; uint8 * value; //[valuelen];} FCGI_PARAMS;

FastCGI中的PARAMS PDU是将HTTP请求头信息和预定义的Key-Value头信息发送给CGI服务器,这些信息都是Key-Value键值对。如果key或value的数据长度在128字节以内,其长度字段只需一个字节即可,如果大于或等于128字节,则其长度字段必须用BigEndian格式的4字节。在对HTTP请求头和预定义头Key-Value对信息封装编码成PARAMS PDU时,每个Header字段的编码格式为:先是Header的name长度,再是value长度,随后是name长度的name数据内容,最后是value长度的value数据内容。

1字节namelen或4字节namelen + 1字节valuelen或4字节valuelen + name + value

所有头信息按照上述编码格式打包完成后,总长度如果不是8的倍数,计算需不全8字节对齐的padding数量,将这些数据填充到FcgiHeader中。

第三个要发送到CGI服务器的PDU是STDIN,STDIN PDU是由FcgiHeader加上实际数据组成。注意的是STDIN数据长度不能大于65535,如果HTTP请求中消息体数据大于65535,需要对消息体拆分成多个STDIN包,使得每个STDIN PDU的消息体长度都在65536字节以下。需要特别注意的是,所有数据内容拆分成多个STDIN PDU完成后,最后还需要添加一个消息体长度为0的STDIN PDU,表示所有的STDIN数据发送完毕。

当eJet系统收到HTTP请求并需要FastCGI转发是,按照以上三类数据包协议格式,将HTTP请求打包封装,并发送成功后,就等等CGI服务器的处理和响应了。

CGI服务器返回的PDU一般如下:

如果出现请求格式错误或其他错误,会返回STDERR数据,其消息体是错误内容,将错误内容取出来可以直接返回给客户端。

笨笨网美国主机,w ww.2 b p .n e t
提醒:《web服务器的域名格式(超详解读web服务器知识)(15/21)》最后刷新时间 2025-03-21 11:16:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《web服务器的域名格式(超详解读web服务器知识)(15/21)》该内容的真实性请自行鉴别。