【FastCGI】FastCGI 协议分析

本文详细介绍了FastCGI协议的通信格式,包括消息头、消息体如FCGI_BEGIN_REQUEST、FCGI_END_REQUEST等,以及Web服务器与FastCGI程序的通信模式。FastCGI通过流式套接字进行通信,提高了服务器处理网页请求的效率。文中还提到了CGI的常见参数和标准输出格式。
摘要由CSDN通过智能技术生成

FastCGI 协议分析

FastCGI(快速通用网关接口)是一种让交互程序与Web服务器通信的协议,可以算是CGI的增强版本。FastCGI减少了网页服务器与CGI程序之间的开销,使得服务器可以同时处理更多的网页请求。目前很多常见的网页服务器都已经支持了该种协议。

通信格式

Web服务器与FastCGI程序之间通过流式套接字来通信,既包含Unix域套接字(Unix Domain
Socket),也可以使用最常见的TCP/IP协议族套接字。FastCGI程序提供的内容与普通的CGI程序相似。由于与CGI程序具有环境变量、标准输入和标准输出等众多获取信息的渠道不同,FastCGI程序仅仅通过Socket获取信息。

消息头

FastCGI规定,任意一个FastCGI数据包必须以一个8字节的消息头开始:

struct FCGI_Header {
  unsigned char version;
  unsigned char type;
  unsigned char requestIdB1;
  unsigned char requestIdB0;
  unsigned char contentLengthB1;
  unsigned char contentLengthB0;
  unsigned char paddingLength;
  unsigned char reserved;
};

在此消息头中,第一个字节(version)表示FastCGI协议的版本,目前一般定义为1。第二个字节(type)表示数据包的类型,这些类型有:

enum FCGI_Type {
  FCGI_BEGIN_REQUEST     = 1,  // (WEB->FastCGI) 表示一次请求的开始
  FCGI_ABORT_REQUEST     = 2,  // (WEB->FastCGI) 表示终止一次请求
  FCGI_END_REQUEST       = 3,  // (FastCGI->WEB) 请求已被处理完毕
  FCGI_PARAMS            = 4,  // (WEB->FastCGI) 表示一个向CGI程序传递的环境变量
  FCGI_STDIN             = 5,  // (WEB->FastCGI) 表示向CGI程序传递的标准输入
  FCGI_STDOUT            = 6,  // (FastCGI->WEB) 表示CGI程序的标准输出   
  FCGI_STDERR            = 7,  // (FastCGI->WEB) 表示CGI程序的标准错误输出
  FCGI_DATA              = 8,  // (WEB->FastCGI) 向CGI程序传递的额外数据
  FCGI_GET_VALUES        = 9,  // (WEB->FastCGI) 向FastCGI程序询问一些环境变量
  FCGI_GET_VALUES_RESULT = 10, <
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值