CGI.pm의 대부분의 함수들은 진행중에 문서를 생성한다. 일반적으로 HTTP 헤더를 먼저 만들며 이어 HTML과 같은 문서를 생성하게 된다. CGI.pm은 HTML과 같은 text/html 형식뿐만아니라 여러가지 다양한 형태의 HTTP 헤더를 생성하는 함수를 제공한다. GIF 이미지를 만들기위해서는 GD.pm 모듈을 보기 바란다.
이들 함수 각각은 HTML이나 HTTP의 일부를 출력할 수 있으며 따라서 브로우저 창에 출력되고 문자열에 덧붙여지고 파일로 저장될 수 있다.
표준 HTTP 헤더 생성하기
임의의 CGI 스크립트에서 첫번째로 출력해야 하는 것은 HTTP 헤더이다. 이 것은 문서의 유형이 무엇인지와 다른 추가적인 정보(언어, 만료기간, 문서의 캐쉬여부등)를 브로우저에게 제공한다. 이 헤더는 또한 서버 밀기(Server Push)와 같은 특수한 목적으로 사용될 수 있다.
print $query->header;
# Content-Type: text/html과 빈줄을 출력
또는
print $query->header('image/gif');
# Content-Type: image/gif과 빈줄을 출력
또는
print $query->header('text/html','204 No response');
# Status: 204 No response, Content-Type: text/html과
# 빈줄을 출력
또는
print $query->header(-type=>'image/gif',# MIME 형식 출력
-nph=>1, # 상태행 출력
-status=>'402 Payment required',# Status 헤더 출력
-expires=>'+3d', # 만료일 출력
-cookie=>$cookie, # 쿠키 출력
-Cost=>'.00'); # Cost 헤더 출력
header()
는 Content-type: 헤더를 리턴한다. 원하는 경우 자신의 MIME 형식을 제공할 수 있으며, 그렇지 않은 경우 기본값은 text/html이다. 다른 추가적인 두번째 매개변수는 상태코드와 이 상태코드에대한 해석이다. 예를들어 브로우저가 할일이 전혀 없다는 것을 통지하기위해 204, "No response"를 지정할 수 있다.
마지막 예는 매개변수의 이름을 이용해서 CGI 메소드에 인자를 전달하는 기명 인자 전달 형식을 보이고 있다. 인식된 매개변수는 -type, -status, -expires과 -cookie이다. 모든 매개변수는 대쉬(-)를 제거한 상태에서 헤더필드에 삽입된다. 이 것으로 원하는 임의의 HTTP 헤더를 지정할 수 있다. 매개변수 이름 중간의 밑줄은 대쉬(-)로 변환된다.
print $query->header(-Content_length=>3002);
대부분의 브로우저는 CGI 출력을 캐쉬하지 않는다. 따라서 브로우저가 해당 페이지를 읽어들일때 마다 스크립트가 새롭게 호출된다. 이러한 특징은 -expires 매개변수를 이용해서 변경할 수 있다. 이 매개변수로 절대 또는 상대 만료 주기를 지정할 때 몇몇 브로우저와 프록시 서버는 지정된 만료일까지 CGI의 출력을 캐쉬한다. 다음 표는 -expires 필드에서 사용할 수 있는 값이다.
형식
의미
+30s
지금부터 30초
+10m
지금부터 10분
+1h
지금부터 1시간
-1d
어제
now
즉시
+3M
석달 내
+10y
10년내
Thursday, 25-Apr-1999 00:40:33 GMT
지정된 시간/날자에
-cookie 매개변수는 상태정보 유지를 위해 이어지는 모든 트랜잭션동안 쿠키를 제공하도록 브로우저에 통지하는 헤더를 만든다. 넷스케잎의 쿠기는 만료일과 같은 속성을 포함하는 특수한 형식을 가지고 있다. 세션 쿠키를 생성/복원하기위해
때때로 문서 자체를 만들지 않고 간단히 다른 문서(URL)로 방향전환하기를 원하는 경우가 있다. 이런 경우는 아마 시간이나 사용자 확인에 따라 URL을 선택해야하는 경우일 것이다.
redirect()
함수는 다른 URL을 브로우저에 전달한다. 만약 이와 같은 방향전환을 사용한다면 다른 어떠한 헤더로 출력하지 않아야 한다. 2.0 버전에서 처럼 비공식적인 Location: 헤더와 공식적인 URI: 헤더 둘다 지원한다. 이 것으로 대부분의 서버와 브로우저를 지원할 수 있다.
한가지 주의할 것은 자기 사이트의 다른 문서로 방향전환 할 때 상대 링크는 바르게 동작하지 않을 수 있다는 것이다. 이 것은 몇몇 서버들이 사용하는 최적화 과정때문이다. 이 것에대한 해결책은 방향전환하려는 문서의 완전한 URL(http:를 포함한)을 사용하는 것이다.
는 HTML 문서의 헤더부분 외에 페이지의 외관과 특징을 제어하는 많은 추가적인 정보를 생성한다.
이 메소드는 HTML 헤더부분과 <BODY>(시작 태그)를 리턴한다. 모든 매개변수는 조건부이다. 기명 매개변수 형식에서 인식할 수 있는 매개변수는 -title, -author, -base, -xbase과 -target이다. 넷스케잎의 확장속성인 BGCOLOR 속성과 같은 임의의 추가젹인 매개변수가 <BODY> 태그에 추가될 수 있다. 추가젹인 매개변수는 대쉬(-)로 시작해야 한다.
-xbase 인자로 다음 예에서 처럼 현재 URL과는 다른 URL에대한 HREF를 제공할 수 있다.
-xbase=>"http://syscon.soongsil.ac.kr/~artech/"
모든 상대적인 링크는 이 링크에대한 상대 URL로 해석된다.
-target 인자로 페이지의 모든 링크와 폼에대한 기본 타겟 프레임을 지정할 수 있다. 이 것을 어떻게 다루는 가에대한 자세한 설명은 프레임에대한 넷스케잎 문서를 보기바란다.
-target=>"answer_window"
또한 -meta 인자로 HTML 헤더부에 임의의 메타정보를 추가할 수 있다. 이 인자는 메타 정보의 이름/값 쌍을 포함하는 연관 배열를 참조한다. 이 것은 다음과 같은 일련의 <META> 태그로 삽입된다.
자바스크립트: -script, -noScript, -onLoad,
-onMouseOver, -onMouseOut와 -onUnload 매개변수는 자바스크립트를 정의/호출을 하는 사용되는 태그나 이벤트를 페이지에 추가하는데 사용된다. -script는 자바스크립트 함수를 정의하는 블럭을 포함한다. 이 블럭은 HTML 헤더부의 <SCRIPT>블럭 내에 있어야한다. 페이지가 완전히 읽혀지기 전에 사용자가 중지 버튼을 누를지라도 모든 자바스크립트가 정삭적으로 동작하도록 이 블럭을 가급적 HTML 헤더부에 두어야 한다. CGI.pm은 이러한 방법으로 스크립트를 형식화 한다.
-onLoad와 -onUnload는 각각 브로우저에의해 페이지가 열려질 때와 닫혀질때 수행될 자바스크립트 코드를 지정하는데 사용된다. 보통 이들 매개변수는 -script 필드내에 정의된 함수를 호출하는데 사용된다.
$query = new CGI;
print $query->header;
$JSCRIPT=<<END;
// 질문
function riddle_me_this() {
var r = prompt("아침에는 네 발로 기고, " +
"점심에는 두발로 걷고, " +
"저력에는 세발로 기는 것은?");
response(r);
}
// 답을 구한다.
function response(answer) {
if (answer == "사람")
alert("짜식, 바보는 아니군!");
else
alert("이구! 맹순아 다시해.");
}
END
print $query->start_html(-title=>'스핑크스의 수수께기',
-script=>$JSCRIPT);
-noScript를 사용해서 자바스크립트를 인식하지 못하는 브로우저(또는 자바스크립트 기능을 사용하지 않는 브로우저)에 출력될 몇몇 HTML 문장을 지정할 수 있다.
넷스케잎 3.0은 LANGUAGE와 SRC를 포함한 몇몇기지 속성을 <SCRIPT> 태그에 추가했다. 이들 중 SRC는 자바스크립트를 각 페이지에 포함시키는 것이 아니라 임의의 파일이나 CGI 스크립내에 자바스크립트를 참조하려는 사람들에게 관심이 가는 속성이다. 이 속성을 사용하기위해 하나 또는 그 이상의 -language, -src, -code를 HASH 참조를 사용해서 -script 매개변수에 포함시킬 수 있다.