Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 History  





2 Specification  



2.1  Request format  





2.2  Example  







3 Web servers that implement SCGI  





4 Language bindings for the SCGI API  





5 See also  





6 Notes  





7 References  





8 External links  














Simple Common Gateway Interface






Català
Deutsch
Español
Français

Русский
Українська

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


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 parse. Unlike CGI, it permits a long-running service process to continue serving requests, thus avoiding delays in responding to requests due to setup overhead (such as connecting to a database).

SCGI is a protocol which defines communication between a web server and an application server. This is in contrast to CGI, which is an earlier application (gateway) interface designed to let the application programmer avoid the complexity of sockets and long-running service processes when poor scalability and high overhead are acceptable.

The SCGI protocol leverages the fact that the web server has already parsed and validated the HTTP request, and canonically communicates the request to the SCGI server while letting the application programmer avoid parsing ambiguities and protocol edge cases. This avoids the complicated header-parsing and header-combining rules from RFC 2616, saving significant complexity in the SCGI server process.

History[edit]

Neil Schemenauer published the original SCGI protocol specification dated October 2001.[1] He developed the first implementations of SCGI and initially published them in April 2002.[2]

Specification[edit]

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 specifically specified by this protocol, although CGI-equivalent HTTP responses are generally used.[note 1]

Request format[edit]

A SCGI request is the concatenationofnetstring-encoded headers and a body. A SCGI response is a normal HTTP response.

Each header consists of a name–value pair, where both the name and the value are null-terminated strings (C strings). The value can be an empty string, in which case the terminating null still remains. Neither name nor value can contain any embedded null bytes. These considerations are standard for C strings, but are often confusing for programmers used to other standards for string-handling.

All provided headers are concatenated to form a single byte sequence, then netstring-encoded. The raw body, if any, is then appended.

Duplicate names are not allowed in the request headers; RFC 2616-compliant header combining[note 2] must already have taken place. The first request header must have the name "CONTENT_LENGTH" and a value that is the length of the body in decimal. The "CONTENT_LENGTH" request header must always be present, even if its value is "0". There must also always be a request header with the name "SCGI" and a value of "1". Standard CGI environment variables should be provided in SCGI headers for compatibility when converting older CGI programs to SCGI. The body (if any) provided in the request follows the headers; its length is specified by the "CONTENT_LENGTH" request header.

While the SCGI protocol insulates the service programmer from some HTTP considerations, various details (such as interpreting the octets of the message body as per the Transfer-Encoding header, the CONTENT_LENGTH being the number of octets after the body has been encoded for transmission, etc.) still require knowledge of the HTTP protocol specification.

Example[edit]

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

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

The SCGI server sends the following response back to the web server:

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

The SCGI server closes the connection.

Web servers that implement SCGI[edit]

(this list is not complete)

Language bindings for the SCGI API[edit]

SCGI can be implemented in any language that supports network sockets and netstrings. The following is a partial list of languages with known SCGI bindings:

See also[edit]

Application/Gateway protocols:

Application hosts (language-specific):

Notes[edit]

1.^ The specification document was placed in the public domain by Neil Schemenauer on 12 January 2006.
2.^ For HTTP header combining, see RFC2616 section 4.2.

References[edit]

  1. ^ Schemenauer, Neil (October 30, 2001). "SCGI: A Simple Common Gateway Interface alternative". Archived from the original on 2002-04-03.
  • ^ "scgi-0.1.tar.gz". Index of /software/files/scgi. MNX: MEMS and Nanotechnology Exchange. April 12, 2002. Archived from the original on 2002-10-20.
  • ^ "Althttpd: The Althttpd Webserver". sqlite.org. Retrieved 19 May 2023.
  • External links[edit]


    Retrieved from "https://en.wikipedia.org/w/index.php?title=Simple_Common_Gateway_Interface&oldid=1219629768"

    Category: 
    Network protocols
    Hidden categories: 
    Articles needing additional references from October 2017
    All articles needing additional references
    Use dmy dates from April 2020
     



    This page was last edited on 18 April 2024, at 22:31 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki