简单通用网关接口
外观
简单通用网关接口 (英語: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 的网页服务器
[编辑]- Apache HTTP Server
- Cherokee
- Lighttpd
- Mathopd (页面存档备份,存于互联网档案馆) - 通过非官方补丁
- 带 ISAPI SCGI 扩展 (页面存档备份,存于互联网档案馆) 的微软網際網路資訊服務
- Nginx
- Avuna HTTPD
SCGI API 的语言绑定
[编辑]- Cobra
- Haskell
- Java,通过 SCGI connector (页面存档备份,存于互联网档案馆)
- Lisp
- Perl,通过 SCGI 包 (页面存档备份,存于互联网档案馆)
- PHP
- Python
- Racket,通过 scgi: Web Server HTTP SCGI and CGI (页面存档备份,存于互联网档案馆)
- Ruby
- Scheme
- Tcl
- Nim
注释
[编辑]- 1.^ 规范文档在 2006 年 1 月 12 日的时候被发布至公有领域。
参见
[编辑]外部链接
[编辑]- SCGI specification (页面存档备份,存于互联网档案馆)
- netstrings specification (页面存档备份,存于互联网档案馆)
- Ether - Ada SCGI library (页面存档备份,存于互联网档案馆)
- Original Ada SCGI interface (页面存档备份,存于互联网档案馆)
- Apache SCGI modules and Python SCGI interface (页面存档备份,存于互联网档案馆)
- Perl SCGI interface (页面存档备份,存于互联网档案馆)
- Haskell SCGI package (页面存档备份,存于互联网档案馆)
- Nginx SCGI Module (页面存档备份,存于互联网档案馆)
- Tcl SCGI module
- IIS SCGI extension (页面存档备份,存于互联网档案馆)
- Guile Scheme library