날짜: 1996-03-18 | 글쓴이: 도아 | 6815 번 | 프린트 | 메일로보내기

제 18강 - CGI 명세 - 출력


CGI 프로그램은 환경변수나 표준입력, 명령행으로부터 입력을 받아 표준 출력(stdout)으로 출력을 내보낸다. 또한 CGI 프로그램의 출력은 동적으로 생성해낸 새로운 문서(Content-Type)일 수도 있고 또는 서버가 특정한 문서를 되도려 주도록 하는 지시정보(Locations)일 때도 있으며, 단지 명령의 수행결과를 리턴하는 상태라인(status)수도 있다.

CGI의 출력은 반드시 이 세가지 타입중 하나 이어야하며, 헤더와 몸체를 분리하기위해 반듯이 헤더와 몸체 사이에 빈줄을 넣어야 한다. Content-type: 리턴될 문서의 MIME 타입

Content-type는 리턴되는 문서의 MIME 타입을 지정하는 항목이다. 현재 인터넷 상에는 아주 많은 MIME 타입이 존재하며, 이 MIME 타입 중 하나를 Content-type 헤더를 이용해서 출력해야 한다. CGI 프로그램의 출력은 반듯이 Content-type, Location, Status Line중 하나를 가장 먼저 출력해야 한다. 이러한 헤더에 이어 빈줄이 하나 삽입되어야 한다.

만약 빈줄이 삽입되지 않은 경우, "HTTPd: malformed header"라는 500 서버에라을 발생한다.

Content-Type: 의 출력형식은 다음과 같다.

1:  > ctype.cgi 
2:  Content-type: text/html
3:  
4:  <html>
5:  <body>
6:  ...
7:  </body>
8:  </html>

위의 출력 형식에서 알 수 있듯이 CGI의 출력의 첫줄은 2행과 같이 Content-Type이 출력되어야 한다. Content-Type은 대소문자를 구분하지 않지만 Content-Type와 콜론(:)사이에 공백이 있어서는 안된다. 만약 Content-Type와 콜론 사이에 공백이 존재하는 경우 Content-Type header로 인식하지 못하므로 4-8행까지의 내용을 그대로 보여주게 된다.

Content-Type이 있고, 분명히 헤더와 몸체(body)를 구분하기 위한 빈줄이 있어도 정상적으로 동작하지 않고, "Unknown File Type"이라는 창이 뜨는 경우가 있다. 이 경우에는 Content-Type에서 MIME Type을 잘못 지정한 경우에 발생한다. 즉, 위의 예에서 text/html을 test/html와 같이 잘못 적은 경우에 발생한다.

3행은 헤더와 몸체를 분리하기위해 반듯이 존재해야하는 항목이다. 4-8행은 실제 Client에 리턴되는 내용으로서 Content-Type에 따라 내용이 달라진다. 위의 예의 경우 Content-Type가 text/html이므로 몸체의 내용 역시 HTML 문서가 된다. Location: 리턴될 문서의 URL

Location도 Content-Type와 마찬가지로 HTTP 명세서에서 정의하고 있는 Header이다. 이 헤더는 어떤 문서에 대한 레퍼런스(reference)를 되돌려 주고자 할 때 사용된다. 웹 서버는 이 헤더를 만나게 되면 다음에 따라오는 값이 절대 경로일 때는 해당하는 문서를 직접 돌려 주고, 완전한 URL(예를 들어, http://any.host.name/path/to/new/doc.html)일 때는 클라이언트에 redirect를 보내주게 된다. Location의 출력형식은 다음과 같다. Local 웹 서버로 Redirectin하는 경우

1:  > location1.cgi 
2:  Location: /~artech/index.html
3:
Remote 웹 서버로 Redirecting하는 경우

1:  > location2.cgi 
2:  Location: http://www.windows95.com
3:  content-type: text/html
4:  
5:  <html><body>
6:  이 URL은 <a href="http://www.windows95.com">http://www.windows95.com</a>
7:  로 변경되었습니다.
8:  </body></html>

Content-Type과 마찬가지로 첫행은 Location 헤더가 된다. Location 헤더도 Content-Type 헤더와 마찬가지로 헤더와 몸체를 분리하기위한 빈줄이 반듯이 출력되어야 한다. 다만 Content-Type 헤더와의 차이점은 Content-Type이 MIME 타입을 정의하고 몸체(body)에 해당 문서를 직접 출력하는 반면에 Location은 문서의 위치만을 되돌려 주면 되므로 몸체(body)의 내용이 없다는 것이다. 이와 같이 문서를 Redirenting하는 경우 서버는 3xx번대 상태코드를 Client에 전송한다. Status Line 상태라인

일반적으로 서버가 CGI 프로그램을 수행하는 경우 CGI 프로그램의 출력에 추가헤더와 상태정보를 덧붙여 클라이언트에 전송하게된다. 그러나 몇몇 특별한 경우 CGI 프로그램에서 상태정보를 직접 출력해야하는 경우가 있다. 이 경우 CGI의 출력은 서버를 경유하지 않고 Client에 직접 전송되기 때문에 이러한 CGI를 Non-Parsed-Header CGI(NPH-CGI)라고 한다. 상태라인(Status Line)은 앞 절에서 보았듯 다음과 같이 구성된다. HTTP-Version SP Status-Code SP Reason-Phrase CRLF

상태라인을 출력하는 형식은 다음과 같다.

1:  > nph-status.cgi 
2:  HTTP/1.0 200 OK
3:  Content-Type: text/html
4:
5:  <html>
6:  <body>
7:  <h1> 문서전송이 성공적입니다 </h1>
8:  </body>
9:  </html>

여기서 2 행이 상태라인을 출력하는 행이다. 상태라인만 출력해도 되지만 일반적으로 상태라인만 출력되는 경우보다는 위의 예에서처럼 Content-Type을 출력하거나 Location을 함께 출력하는 경우가 일반적이다. 상태라인과 Header를 함께 출력하는 경우, 헤더부와 몸체부(body) 사이를 빈줄로 구분하며, 헤더와 상태라인은 빈줄없이 출력해야 한다.



다음글: 제 19강 - CGI 명세 - 인코딩 (7614)1996-03-19
이전글: 제 17강 - CGI 명세 - 입력 (7685)1996-03-17

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.