아마도 독자들은 CGI 프로그램이 신비감을 가지고 있다고 느낄 것입니다. 이 섹션에서는 CGI 프로그램의 몇 가지 기본 프로그래밍 프로세스를 설명합니다. 읽고 나면 더 이상 미스터리는 없을 것입니다.
3. CGI 사양과 관련된 기타 문제:
아마도 독자들은 CGI 프로그램이 신비감을 가지고 있다고 느낄 것입니다. 이 섹션에서는 CGI 프로그램의 몇 가지 기본 프로그래밍 프로세스를 설명합니다. 읽고 나면 더 이상 미스터리는 없을 것입니다.
우선 프로그래밍 작업을 할 때 큰 작업을 여러 개의 작은 작업으로 나누고 각각의 작은 작업은 상대적으로 독립적인 기능을 완료합니다. 많은 사람들은 CGI 프로그래밍이 어렵다고 생각하기 때문에 CGI 프로그램을 직접 작성하는 것을 꺼립니다. 실제로 일반적인 CGI 프로그램을 다음과 같은 부분으로 나누어 하나씩 풀어보면 CGI 프로그램을 사용하는데 어려움은 없을 것입니다.
일반적으로 브라우저에서 CGI 프로그램을 호출할 때 서버는 먼저 CGI 프로그램을 찾아야 합니다. 일반적으로 CGI 프로그램은 OmniHTTPD에서 cgi-bin 및 cgi-win 가상 디렉토리에 위치합니다. 디렉토리에 지정된 실제 디렉토리는 각각 c:httpdcgi-bin 및 c:httpdcgi-win 디렉토리입니다. OmniHTTPD에서 실제 디렉터리를 수정하거나 다음과 같이 가상 디렉터리를 추가할 수 있습니다. c:my-cgi 디렉터리 프로그램에 test1.cgi라는 CGI가 있는 경우 가상 디렉터리 cgi-test를 c:my-cgi로 지정합니다. , 브라우저에서 http://localhost/cgi-test/test1.cgi 주소로 호출할 수 있습니다.
정상적인 상황에서 서버는 브라우저가 요청한 CGI 프로그램을 찾아 이 CGI 프로그램의 프로세스를 생성합니다. 이러한 방식으로 브라우저와 서버가 연결되었습니다. CGI 프로그램 실행이 완료되면 프로세스가 사라지고 연결이 끊어집니다. 위 그림의 모든 작업은 연결이 설정된 시간 내에 완료되므로 각 CGI 프로그램이 완료하는 작업은 가능한 한 작아야 하며, 그렇지 않으면 서버의 시간과 리소스를 많이 차지하게 됩니다. 클라이언트 브라우저의 시간도 매우 길어집니다.
위 그림에서 볼 수 있듯이 CGI 프로그램은 일반적으로 데이터 입력, 데이터 처리 및 데이터 출력의 세 부분으로 나누어지며 때로는 데이터 처리 부분에서 데이터베이스와 상호 작용해야 합니다(이것도 CGI의 특징입니다. 프로그램). 이 세 가지 부분 중 데이터 입력과 데이터 출력은 엄격한 사양을 갖고 있으며, 데이터 처리는 상상대로 할 수 있는 부분이다. 다음으로는 데이터 입력과 데이터 출력에 대한 사양과 주의사항에 대해 알아보겠습니다.
이전에는 CGI 프로그램에서 사용하는 거의 모든 환경 변수를 나열했습니다. 그 중 상당 부분이 데이터의 입력과 출력과 밀접하게 연관되어 있다. 아래에는 범주별로 가장 일반적으로 사용되는 환경 변수가 나열되어 있습니다.
서버 관련 환경 변수:
GATEWAY_INTERFACE
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
서버_소프트웨어
클라이언트 관련 환경 변수:
HTTP_수락
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_AUTHORIZATION
HTTP_CHARGE_TO
HTTP_FROM
HTTP_IF_MODIFIED_SINCE
HTTP_PRAGMA
HTTP_REFERER
HTTP_USER_AGENT
요청과 관련된 환경 변수:
AUTH_TYPE
CONTENT_FILE
CONTENT_LENGTH
CONTENT_TYPE
OUTPUT_FILE
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
REMOTE_USER
REQUEST_LINE
REQUEST_METHOD
SCRipT_NAME
여기서는 CONTENT_FILE 및 OUTPUT_FILE을 언급할 가치가 있습니다. Windows 3.1 및 DOS에서는 표준 입력 및 출력(STDIN 및 STDOUT)을 통해 읽고 쓸 수 있는 언어가 많지 않으므로 대신 이 두 변수가 사용됩니다. 기타 환경변수에 대해서는 이전 상세목록을 참고하시기 바랍니다.
앞서 언급했듯이 GET 메서드는 URL을 통해 데이터를 전달하고, POST 메서드는 STDIN을 통해 데이터를 전달합니다. 어떤 방법을 사용하든 데이터는 데이터 전송 중에 인코딩됩니다. 그러나 우리가 사용할 개발 언어(Perl의 cgi-lib.pl, Delphi의 TWebModule 등)가 자동으로 이 작업을 완료할 수 있기 때문에 인코딩 및 디코딩에 대해 걱정할 필요가 없습니다.
헤더 정보는 CGI 프로그래밍에서도 매우 중요합니다. 헤더 정보는 클라이언트에 정보를 보내기 전에 CGI 프로그램에서 보내는 신호입니다. 헤더 정보에는 세 가지 주요 유형이 있습니다.
콘텐츠 유형 //HTML을 브라우저로 전송
위치 //새 URL을 브라우저에 전달합니다.
상태 //보통 CGI 프로그램 오류 발생시 오류를 확인하는데 사용됩니다.
콘텐츠 유형은 브라우저에서 처리되는 정보 유형으로, 주로 MIME 유형입니다. 메소드는 유형과 하위 유형의 조합으로 정의됩니다. 일반적으로 사용되는 MIME 유형은 텍스트, 멀티파트, 메시지, 애플리케이션, 이미지, 오디오 및 비디오입니다.
예를 들어, CGI 프로그램은 HTML 문서를 브라우저에 보내기 전에 먼저 text/html을 보내야 합니다. Perl에서는 다음과 같이 작성되었습니다.
"콘텐츠 유형:텍스트/html"을 인쇄하세요.
print "< h1> 안녕하세요 여러분! < /h1> "
위치로 인해 브라우저가 새 URL로 리디렉션됩니다. 예를 들어:
"위치:http://www.chinabyte.com"을 인쇄하세요.
이 Perl 프로그램은 브라우저를 ChinaByte의 홈페이지로 리디렉션합니다.
상태는 CGI 프로그램의 상태를 나타내며 일반적으로 CGI 프로그램이 실패할 때 오류를 확인하는 데 사용됩니다. 다음 표에는 일반적으로 사용되는 상태 코드와 그 의미가 나열되어 있습니다.
코드 결과 설명
200 OK 요청이 정상적으로 충족되었습니다.
202 Accept 요청이 승인되어 처리 중입니다.
301 이동됨 문서가 새 위치로 이동되었습니다.
302 발견 문서가 설명이 아닌 서버의 다른 곳에 있습니다.
400 Bad Request HTTP 요청 구문이 잘못되었습니다.
401 무단 문서에 접근 권한이 필요합니다.
403 Forbindden 서버가 문서에 대한 접근을 거부했습니다.
404 No Found 서버가 문서를 찾을 수 없습니다.
500 Server Error 서버에 심각한 오류가 발생했습니다.
502 서비스 과부하 서버가 사용 중이어서 요청을 처리할 수 없습니다.
여기서 끝입니다. CGI에 대한 이러한 기본 지식을 갖춘 후에는 모든 언어를 사용하여 CGI 프로그램 개발을 단계별로 시작할 수 있습니다. 다시 말씀드리지만, CGI 프로그램은 신비한 것이 아닙니다. 단지 서버와 일종의 작업을 생성하기 위한 대화일 뿐입니다.