QUERY_STRING은 URL의 첫번째 '?'뒤에 나오는 것들이다. 이 정보는 ISINDEX
문서나 HTML form(GET action을 포함하는)에 의해 추가된다. 이것은 또한
게이트웨이를 참조 하는 HTML anchor에 직접 포함될수도 있다.
이 문자열은 보통 정보 질의가 될 것이다.
이 문자열은 표준 URL형식으로 암호화(encoded)되어 있다. 공백은 +로 변환되고,
특수문자는 %xx(16 진수)로 변환된다.
부가적인 정보를 스크립트에게 전송하기 위해, CGI는 이 정보를 URL에
포함시킨다.
이 정보는 URL의 게이트웨이 패스다음에 놓여지며, 서버에 의해 암호화되지
않는다. 이 것은 CGI프로그램에게 화일의 위치를 전송할 때 사용된다.
/cgi-bin/foobar라는 CGI프로그램이 있고, 서버의 DocumentRoot에 존재하는
화일들을 처리한다고 하자.
foobar에게 어떤 화일을 처리할 것인지를 전달해야 할때, URL의 끝에 부가적인
패스 정보를 포함함으로써, foobar는 PATH_INFO 환경변수를 통해 DocumentRoot에
대한 문서의 상대적인 위치를, PATH_TRANSLATED 환경변수를 통해 문서의 실제
패스를 얻을 수 있다.
이러한 경우, 출력되는 문서가 MIME이라는 것을 서버에게 알려야 한다. 일반적인
MIME타입은 text/html이다.
예를들어, HTML을 클라이언트에 보낼때, 출력은 다음과 같은 형식을 갖는다.
요즈음 브라우저들은 자동적으로 새로운 다큐멘트로 이동을 한다.
http://www.yahoo.com에 Random 버튼은 바로 Location을 사용하여
브라우저로 하여금 새로운 문서로 이동하게 한다.
다른 화일을 참조하기를 원한다면 단지 다음과 같은 부분(가상)URL을 사용하면
된다.
FORM태그는 HTML 문서내에 fill-out form을 규정한다. 하나의 문서내에 여러개의
fill-out form이 존재할 수 있지만, nested된 형태는 허용되지 않는다.
FORM의 형식은 다음과 같다.
INPUT태그는 FORM내에서 단순한 입력 요소를 규정하기 위해 사용된다.
INPUT의 속성은 다음과 같다.
다수의 라인을 갖는 텍스트 엔트리 필드로 사용된다.
자동적으로 스크롤바를 갖는다. 시작과 끝 태그를 갖는다. 디폴트 내용을 갖을수
있다.
submit button이 눌려졌을때, form의 내용이 질의 URL로 변환된다.
form의 내용들은 GET method와 동일하게 변환되지만, form의 내용이
data block로 보내진다.
form에 단 하나의 텍스트 필드가 있고, 그 텍스트 필드의 NAME이 "isindex"인 경우에,
submit된 질의는 ISINDEX를 사용하는 경우와 동일하다("url?querystring" not
"url? isindex=querystring").
form이 METHOD="GET"이었다면, CGI 프로그램은 환경 변수 QUERY_STRING를 통해,
암호화된 form input을 받을 것이다.
form이 METHOD="POST"이었다면, CGI 프로그램은 stdin상에서 암호화된 form input
을 받을 것이다. 서버는 데이타의 끝에 EOF를 주지 않을 것이다. 그러므로 환경
변수 CONTENT_LENGTH를 사용하여 얼마나 많은 데이타를 stdin으로 부터 읽어들일
것인가를 결정해야 한다.
기본적인 절차는 '&'에 의해 데이타들을 분리하는 것이다. 그다음
name=value쌍을 얻고, name과 value를 해독한 다음, 일을 수행하면 된다.
형식 : <!--#command tag1="value1" tag2="value2"-->
Command와 tag의 형식은 다음과 같다.
4.1 MIME 타입인 문서
Sample output
What do you think of this?
4.2 다른 문서에 대한 참조
5. Fill-Out Form
5.1 FORM 태그
5.2 INPUT 태그
5.3 SELECT 태그
5.4 TEXTAREA 태그
6. Form Submission
Form을 이용하여 사용자의 입력을 받고, 최종적으로 submit 버튼이 눌려지면,
입력된 내용이 서버에게 넘겨진다. 이때, Method의 종류는 GET과 POST 두가지중
하나가 되며, 각각의 경우 데이타가 서버에게 전달되는 방식은 다음과 같다.
"submit"요소는form에서 언제나 필요하다. 단, 예외적으로 하나의 INPUT요소를
포함하는 form이나, 적어도 하나의 이상의 INPUT요소(type이 IMAGE인)를 갖는
form에서는 필요없다.
text나 password 엔트리 필드의 경우에는, 사용자가 적어넣은 내용이 값이 된다. 만약
아무것도 적어넣지 않았다면 null이 된다.
checkbox와 radio button의 VALUE 속성들은 그것들이 check되었을때의 값을
명시한다. check되지 않은 checkbox는 질의어로 변환될때 사라진다.
multiple checkbox는 동일한 NAME과 다른 VALUE를 갖을 수 있다.
multiple radio button도 또한 동일한 NAME과 다른 VALUE를 갖을 수 있다. 7. Decoding FORMs with CGI
6장에서 설명했던바와 같이, 서버로 넘어오는 method는 두가지 형태중의 하나이며,
각각은 다른 형식으로 데이타를 전송하기 때문에 이에 대한 처리가 필요하다.
각 method에 대한 처리 방식은 다음과 같다.
Form data는 name=value의 쌍이고 & 문자에 의해 구분된다. 각 name=value쌍은
암호화된 URL이다. 즉, 공백은 '+'로 변환되고, 어떤 문자는 16진수로 변환된다. 8. CGI 환경 변수
서버에서 스크립트로 정보요구에 관한 데이타를 넘겨주기 위해, 서버는 환경변수
뿐만 아니라 명령어라인 아규멘트를 사용한다. 이러한 환경변수들은 서버가
게이트 웨이 프로그램을 실행시킬 때 세팅된다.
9. SSI
HTML문서를 작성할 때, 평범한 텍스트로만 만들다 보면 여러가지 불편함을 느끼게
된다. CGI스크립트를 사용하여 어느정도 이런한 갈증은 해소할 수 있지만, CGI또한
한계점이 있다. 대부분의 CGI들이 클라이언트의 입력에 의해 수동적으로 수행되는
점이 바로 그것이다.
이러한 점을 해결하고자, NCSA httpd는 Server Side Include를 제공하고 있다.
Server Side Include를 사용하여, 자신의 문서에 signiture를 쉽게 추가할 수도
있고, UNIX에서 제공하는 쉘 스크립트의 출력을 문서에 담을 수도 있다. 또한,
CGI스크립트에 더 많은 기능을 부여할 수도 있다.
Server Side Include기능은 단지 HTML문서내에 '<' 와 '>'를 이용하여 명령어와
옵션을 줌으로서 수행되며, 서버는 이 문서를 파싱하여 주어진 명령어를 해독한
다음, 그 결과를 문서 중간에 삽입하여 클라이언트에 보내주게 된다.
10. Installation
11. 인클루드 형식
모든 디렉티브는 다음과 같은 형식을 갖는다.
config 디렉티브는 에러처리와 시간형식, 화일크기형식을 제어한다.
현 문서에 다른 문서를 삽입하기 위해 사용한다.
include 변수중의 하나의 값을 출력한다. 날짜출력시 timefmt에 의해
지정된 출력형식으로 제약을 받는다. var라는 tag를 사용한다.
화일의 크기를 출력한다. tag는 include와 동일하다. sizefmt형식의
영향을 받는다.
화일의 마지막 갱신 날짜를 출력한다. timefmt형식의 영향을 받는다.
주어진 쉘명령어나 CGI 스크립트를 실행한다.
12. Parsed Documents 용으로 정의된 변수들
다음의 변수들은 CGI 스크립트에 응용될 수도 있고, echo 명령어에 의해
바로 출력할 수도 있다.
참고문헌
URL:
http://hoohoo.ncsa.uiuc.edu/cgi
URL:
http://hoohoo.ncsa.uiuc.edu/docs/tutorials/includes.html
URL:
http://agora.leeds.ac.uk/nik/Cgi/start.html