簡單通用網關接口
外觀
簡單通用網關接口 (英語: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