단순한 공통 게이트웨이 인터페이스

Simple Common Gateway Interface

SCGI(Simple Common Gateway Interface)는 CGI 프로토콜 대신 응용 프로그램이 HTTP 서버와 인터페이스하기 위한 프로토콜입니다.Fast CGI와 비슷하지만 해석하기 쉽도록 설계되었습니다.CGI와는 달리 장기간에 걸친 서비스 프로세스를 통해 요구에 대한 처리를 계속할 수 있기 때문에 셋업 오버헤드로 인한 요구 응답 지연(데이터베이스 접속 등)을 회피할 수 있습니다.

SCGI는 웹 서버와 응용 프로그램 서버 간의 통신정의하는 프로토콜입니다.이는 낮은 확장성 및 높은 오버헤드가 허용될 경우 애플리케이션 프로그래머가 소켓의 복잡성과 장기 실행 서비스 프로세스를 피할 수 있도록 설계된 초기 애플리케이션(게이트웨이) 인터페이스인 CGI와 대조됩니다.

SCGI 프로토콜은 웹 서버가 HTTP 요청을 이미 구문 분석 및 검증하고 SCGI 서버에 요청을 캐논적으로 전달하면서 애플리케이션 프로그래머가 모호성 및 프로토콜 엣지 케이스를 구문 분석할 필요가 없도록 합니다.이를 통해 RFC 2616의 복잡한 헤더 파싱 및 헤더 조합 규칙을 피할 수 있어 SCGI 서버 프로세스의 복잡성을 크게 줄일 수 있습니다.

역사

Neil Schemenauer는 2001년 [1]10월호 SCGI 프로토콜의 원본 사양을 발표했습니다.그는 SCGI의 첫 번째 구현을 개발하여 2002년 [2]4월에 처음 발표했습니다.

사양

클라이언트는 신뢰할 수 있는 스트림 프로토콜을 통해 SCGI 서버에 연결하여 8비트 바이트를 전송합니다.클라이언트는 요구를 송신하는 것으로 시작합니다.SCGI 서버는 요청의 끝을 확인하면 응답을 반환하고 연결을 닫습니다.CGI와 동등한 HTTP 응답이 일반적으로 [note 1]사용되지만 응답 형식은 이 프로토콜에 의해 구체적으로 지정되지 않습니다.

요청 형식

SCGI 요구는 netstring으로 인코딩된 헤더와 본문의 결합입니다.SCGI 응답은 일반 HTTP 응답입니다.

각 헤더는 이름과 값의 쌍으로 구성됩니다.이름과 값은 모두 늘 종단 문자열(C 문자열)입니다.값은 문자열로 할 수 있습니다.이 경우 끝의 늘은 그대로 유지됩니다.이름과 값 모두 포함된 null 바이트를 포함할 수 없습니다.이러한 고려사항은 C 문자열의 표준 사항이지만 문자열 처리의 다른 표준에 익숙한 프로그래머에게는 종종 혼동됩니다.

제공된 모든 헤더는 단일 바이트시퀀스를 형성하기 위해 연결된 후 netstring으로 인코딩됩니다.그런 다음 원시 본문이 추가됩니다(있는 경우).

요청 헤더에는 중복된 이름을 사용할 수 없습니다.RFC 2616 준거 헤더의[note 2] 조합이 이미 실행되어 있어야 합니다.첫 번째 요청 헤더에는 "CONTENT_LENGH"라는 이름과 10진수 본문의 길이 값을 지정해야 합니다."CONTENT_LENGH" 요청 헤더는 값이 "0"인 경우에도 항상 존재해야 합니다.또한 "SCGI"라는 이름과 "1"이라는 값을 가진 요청 헤더가 항상 있어야 합니다.오래된 CGI 프로그램을 SCGI로 변환할 때 호환성을 위해 SCGI 헤더에 표준 CGI 환경변수를 지정해야 합니다.요청으로 제공된 본문(있는 경우)은 헤더에 이어 길이가 "CONTENT_LENGH" 요청 헤더로 지정됩니다.

SCGI 프로토콜은 서비스 프로그래머를 HTTP 고려사항으로부터 보호하지만 다양한 세부사항(Transfer-Encoding 헤더에 따라 메시지 본문의 옥텟을 해석하는 것, CONTENT_LENGH가 전송을 위해 인코딩된 후의 옥텟 수 등)은 HTTP 프로토콜에 대한 지식이 필요합니다.동작.

웹 서버(SCGI 클라이언트)는 접속을 열고 다음 문자열의 연결을 서비스 프로세스(SCGI 서버)로 전송합니다.

"70:" "CONTENT_LENGH" <00> "SCGI" <00> "1" "REQUEST_METHOD" <00> "POST" <00> "REQUEST_URI" <00> "/deep thinked" <00> "삶에 대한 답은 무엇입니까?" 

SCGI 서버는 다음 응답을 웹 서버로 반환합니다.

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

SCGI 서버가 연결을 닫습니다.

SCGI를 구현하는 웹 서버

(이 목록은 완전하지 않습니다.)

SCGI API 언어 바인딩

SCGI는 네트워크 소켓 및 넷스트링지원하는 모든 언어로 구현할 수 있습니다.SCGI 바인딩이 알려진 언어의 일부를 다음에 나타냅니다.

「 」를 참조해 주세요.

응용 프로그램/게이트웨이 프로토콜:

  • Common Gateway Interface(CGI; 공통 게이트웨이 인터페이스) - 요청별로 하위 프로세스를 시작합니다.
  • Fast CGI - 장기간에 걸친 CGI 유사 프로세스 지원으로 확장성 향상 시도
  • Apache Jserv Protocol - 웹 서버와 응용 프로그램 서버 간의 요청을 프록시하기 위한 이진 프로토콜입니다.

응용 프로그램 호스트(언어별):

  • - Ruby 웹 서버 인터페이스
  • PSGI - Perl Web Server 게이트웨이 인터페이스
  • WSGI - Python Web Server Gateway 인터페이스
  • JSGIJavaScript 웹 서버 게이트웨이 인터페이스

메모들

1.^ 사양 문서는 2006년 1월 12일 닐 셰메나우어에 의해 공개되었다.
2.^ HTTP 헤더의 조합에 대해서는, RFC2616 섹션 4.2 를 참조해 주세요.

레퍼런스

  1. ^ Schemenauer, Neil (October 30, 2001). "SCGI: A Simple Common Gateway Interface alternative". Archived from the original on 2002-04-03.
  2. ^ "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.

외부 링크