跳至內容

簡單通用網關接口

維基百科,自由的百科全書

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

外部連結