Jump to content

Simple Common Gateway Interface

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 2601:183:4500:ca6:3d3:a288:e27e:c3ce (talk) at 00:28, 30 June 2018 (Cleaned up Request Format). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The Simple Common Gateway Interface (SCGI) is a protocol for applications to interface with HTTP servers, as an alternative to the CGI protocol. It is similar to FastCGI but is designed to be easier to implement and crucially, permits CGI operations where the CGI operation has significant latency[clarification needed] (e.g. contacting an external database).

Specification

The client connects to a SCGI server over a reliable stream protocol allowing transmission of 8-bit bytes. The client begins by sending a request. When the SCGI server sees the end of the request it sends back a response and closes the connection. The format of the response is not specified by this protocol.[note 1]

Request format

A SCGI request is the concatenation of netstring encoded headers and a body.

Each header consists of a name-value pair with a null byte after the name and the value. The value can be an empty string (0 bytes), but both name and value must not contain null bytes. Each header thus has the following format (where "0x00" denotes a null character and "|" represents concatenation):

name | 0x00 | value | 0x00

Additional headers are simply concatenated together before netstring encoding.

Duplicate names are not allowed in the headers. The first header must have the name "CONTENT_LENGTH" and a value that is the length of the body in decimal. The "CONTENT_LENGTH" header must always be present, even if its value is "0". There must also always be a header with the name "SCGI" and a value of "1". Standard CGI environment variables should be provided in SCGI headers for compatibility with older CGI programs. The body is sent following the headers and its length is specified by the "CONTENT_LENGTH" header.

A full request follows this format:

<length_of_headers> | ":" | <headers> | "," | <body>

Example

The web server (an SCGI client) opens a connection and sends the concatenation of the following strings:

"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?"

The web application (SCGI server) sends the following response:

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

The SCGI server then closes the connection.

Web servers that implement SCGI

Language bindings for the SCGI API

Notes

1.^ The specification document was placed in the public domain by Neil Schemenauer on 12 January 2006.

See also

  • Rack - Ruby web server interface
  • PSGI - Perl Web Server Gateway Interface
  • WSGI - Web Server Gateway Interface