简单通用网关接口

维基百科,自由的百科全书
跳到导航 跳到搜索

简单通用网关接口 (Simple Common Gateway Interface ,简称 SCGI) 是一种让应用程序与 HTTP 服务器交互的协议,作为 CGI 协议的替代。它类似于 FastCGI 但它被设计地更容易实现,且最重要的是,允许有很大延迟的 CGI 操作(如联系外部数据库)。

规范[编辑]

客户端通过一个可靠的流流协议连接到一个 SCGI 服务器,进行 8 比特字节的传输。客户端首先发送请求,当 SCGI 服务器看到请求结束时,它会将回应发送回来并关闭连接。[note 1]

请求格式[编辑]

请求包含几个头部和正文。头部的格式是:

headers ::= header*
header ::= name NUL value NUL
name ::= notnull+
value ::= notnull*
notnull ::= <01> | <02> | <03> | … | <ff>
NUL = <00>

头部中不允许出现重复的名称。第一个头部的名称必须是 "CONTENT_LENGTH" 且值为正文的十进制长度。 "CONTENT_LENGTH" 头必须始终存在,即使它的值为 "0" 。此外还必须有一个头部的名称为 "SCGI" 且值为 "1"。为了方便从 CGI 过渡,标准的 CGI 环境变量也应该被作为 SCGI 头部提供。

头部会被编码为 netstring ,然后发送到服务器应用程序。正文将在头部后发送,它的长度由 "CONTENT_LENGTH" 头部指定。

示例[编辑]

网页服务器(SCGI 客户端)打开连接并发送以下字符串拼接起来的数据:

"70:"
    "CONTENT_LENGTH" <00> "56" <00>
    "SCGI" <00> "1" <00>
    "REQUEST_METHOD" <00> "POST" <00>
    "REQUEST_URI" <00> "/deepthought" <00>
","
"What is the answer to life, the Universe and everything?"

网页应用程序(SCGI 服务器)发送以下回应:

"Status: 200 OK" <0d 0a>
"Content-Type: text/plain" <0d 0a>
"" <0d 0a>
"42"

然后 SCGI 服务器关闭连接。

实现 SCGI 的网页服务器[编辑]

SCGI API 的语言绑定[编辑]

注释[编辑]

1.^ 规范文档在 2006 年 1 月 12 日的时候被发布至公有领域。

参见[编辑]

  • Rack - Ruby 网页服务器接口
  • PSGI - Perl 网页服务器接口
  • WSGI

外部链接[编辑]