html에서는 불가능한 웹(WWW)의 동적인 부분들을 가능하게 해주는 무언가...

클라이언트의 HTTP GET, POST 요청은 표준 입력을 통해 HTML 데이터를 CGI 프로그램에 보낼 수 있음.

서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법

특정 파일 확장자의 경우 (.php등) CGI를 실행하세요

CGI를 직접 호출하는 것이 아니라 PATH_INFO (환경변수?)를 이용하는듯

chunked req은 unchunk 해야됨. (CGI는 리퀘스트 body의 끝에 EOF를 찾기때문에?)

CGI 결과값에서 content_length가 없다면 EOF가 데이터의 끝을 나타냄.

다음과 같은 mete-variables를 설정해야함. (위키피디아 : CGI 프로그램에 넘기는 환경변수들에 대한 설명에서 가져옴 얘네를 파싱해야 하는 듯 합니다...)

AUTH_TYPE : identification type, if applicable. CONTENT_LENGTH : size of input data (decimal, in octets) if provided via HTTP header. CONTENT_TYPE : Internet media type of input data if PUT or POST method are used, as provided via HTTP header. GATEWAY_INTERFACE : CGI/version. PATH_INFO : path suffix, if appended to URL after program name and a slash. PATH_TRANSLATED : corresponding full path as supposed by server, if PATH_INFO is present. QUERY_STRING : the part of URL after ? character. The query string may be composed of *name=value pairs separated with ampersands (such as var1=val1&var2=val2...) when used to submit form data transferred via GET method as defined by HTML application/x-www-form-urlencoded. REMOTE_ADDR : IP address of the client (dot-decimal). REMOTE_IDENT : see ident, only if server performed such lookup. REMOTE_USER : used for certain AUTH_TYPEs. REQUEST_METHOD : name of HTTP method. REQUEST_URI : 예 ) "/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding" SCRIPT_NAME : relative path to the program, like /cgi-bin/script.cgi. SERVER_NAME : host name of the server, may be dot-decimal IP address. SERVER_PORT : TCP port (decimal). SERVER_PROTOCOL : HTTP/version. SERVER_SOFTWARE : name/version of HTTP server.

첫번째 argument로 요청된 파일(?)을 사용하여 CGI호출

상대경로 접근을 위해 CGI가 적절한곳에 있어야함.

php-cgi가 잘 작동해야 함.

** CGI 말고는 fork 쓰지말라고 적혀있는걸 보면 CGI에선 fork 써도 되는듯

위키피디아 : https://en.wikipedia.org/wiki/Common_Gateway_Interface

rfc3875(cgi 프로토콜) : https://tools.ietf.org/html/rfc3875