1 / 25

CGI (Common Gate Interface)

CGI (Common Gate Interface). 1. CGI 개요 2. CGI 응용 예 3. CGI 활용 준비작업 4. CGI 언어 5. CGI 환경변수 6. Input to CGI 7. Output from CGI 8. <form> tag & CGI 기초 예제 9. CGI 예제 Hello World!. Submit (Form). Call CGI. Form. CGI Program’s Response. CGI Program’s Response. WWW Browser

zahi
Download Presentation

CGI (Common Gate Interface)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CGI (Common Gate Interface) 1. CGI 개요 2. CGI 응용 예 3. CGI 활용 준비작업 4. CGI 언어 5. CGI 환경변수 6. Input to CGI 7. Output from CGI 8. <form> tag & CGI 기초 예제 9. CGI 예제 Hello World!

  2. Submit (Form) Call CGI Form CGI Program’s Response CGI Program’s Response WWW Browser (Client) Server Application CGI 개요 - I • CGI(Common Gateway Interface)의 정의 • CGI는 Web Server의 일부분이다. • CGI는 • Information Server(Web Server = HTTP Server)를 통하여, • 외부프로그램이나 게이트웨이를 실행하기 위한 • 인터페이스 프로그램이다. • CGI는 Server가 제공하는 Data를 Client가 읽을 수 있는 형태로 변환해준다.

  3. CGI 개요 - II • CGI의 Major Applications • Form • User로부터 정보를 입력받는데 사용될 수 있다. • Back-and-forth Interaction • Gateway • Client가 직접 읽을 수 없는 정보(예, DBMS의 Data)를 획득하고, 처리하여 Client에게 제공하는 프로그램. • Virtual Documents • CGI의 Heart라고 칭해진다. • User의 정보요청에 따라 실시간으로 정보를 제공한다. • 정적으로 저장되어 있는 File이 아니라, 데이타의 Stream을 넘겨준다.

  4. 1 6 Web Browser (MS IE, Netscape) Information Server (HTTPD) 2 5 DB Gateway 3 CGI DBMS 4 CGI 개요 - III

  5. CGI 응용 예 • 널리 사용되고 있는 CGI 응용 예 • Search Engine • 정보검색을 위한 Query 처리 • Imagemap • Guest Book (방명록) • Order Form • On-Line 주문 • Clock, Counter, Web Statistics • Web Home Page의 Accessory로도 이용되고 있다. • Bi-lingual Dictionary • 한-영, 영-한, 일-영, 영-일 사전 등 • Intranet Application

  6. CGI 활용 • CGI (프로그램)이 얻을 수 있는 데이터의 종류 (1) Client, Server, User에 관한 정보 • 환경변수(Environmental Variable)를 참조하여 얻을 수 있다. (2) User가 입력한 Form Data • 환경변수에 덧붙여진 상태로 얻을 수도 있으며, (GET) • 표준입력 데이터 stream(stdin)으로부터 얻을 수도 있다. (POST) (3) Pathname 정보 • 환경변수를 참조하여 얻을 수 있다.

  7. CGI 언어 - I • CGI Programming 언어(들) • C/C++(본 수업시간에 참조할 언어) • Fortran • PERL(가장 널리 사용되는 CGI Programming 언어) • TCL • Any Unix shell • Visual Basic • AppleScript • CGI와 보안(security) • CGI는 실행형 프로그램이므로, 보안 문제와 밀접하게 관련되어 있다. • CGI 프로그램의 위치를 특정 Directory로 제한할 수 있다. • CGI 프로그램의 형태를 제한할 수 있다.

  8. CGI 언어 - II • Compiled Language • C - language • string 처리 문제, error에 둔감 : 단점 • C++ - language • 객체지향적 언어 • Visual Basic • CPU 집중적, server에 제한 • Compiled Interpreted Language • Java • 객체제향적 언어, 하드웨어 독립적 • JavaScript • script language, not CGI language • VB(Visual Basic)Script • script language, not CGI language

  9. CGI 언어 • CGI 언어 - OS 간 비교

  10. Input to CGI - I • Server에 관한 정보를 얻는 Perl Script #!/opt/gnu/bin/perl print "Content-type: text/html","\n\n"; print "<HTML>","\n"; print "<HEAD><TITLE> CGI EX-1 : Environmental Variable </TITLE></HEAD>","\n"; print "<BODY BACKGROUND=../background/bg2.gif>\n"; print "<HR noshade>","\n"; print "<H1 ALIGN=CENTER> <FONT COLOR=BLUE> Environmental Variable </FONT></H1>","\n"; print "<HR noshade>","\n"; print "<BODY><P><UL>","\n"; print "Server Name : ",$ENV{'SERVER_NAME'}, "<BR>","\n"; print "Port No : ",$ENV{'SERVER_PORT'}, "<BR>","\n"; print "Server Software : ",$ENV{'SERVER_SOFTWARE'}, "<BR>","\n"; print "Server Protocol : ",$ENV{'SERVER_PROTOCOL'}, "<BR>","\n"; print "CGI Revision : ",$ENV{'SERVER_INTERFACE'}, "<BR>","\n"; print "</UL></P>","\n"; print "</BODY></HTML>","\n"; exit (0);

  11. Input to CGI - II • Server에 관한 정보를 얻는 C Program #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { printf("Content-type: text/plain\n\n"); printf("SERVER NAME : %s\n",getenv("SERVER_NAME")); printf("PORT NO : %s\n",getenv("SERVER_PORT")); printf("SERVER SOFTWARE : %s\n",getenv("SERVER_SOFTWARE")); printf("SERVER PROTOCOL : %s\n",getenv("SERVER_PROTOCOL")); printf("CGI REVISION : %s\n",getenv("SERVER_INTERFACE")); }

  12. Input to CGI - III • Server에 관한 정보(예: logisys.snu.ac.kr) Server Name : ultra.snu.ac.kr Port No : 80 Server Software : NCSA/1.5.2 Server Protocol : HTTP/1.0 CGI Revision : • Client에 관한 정보(예: 147.46.35.171) REMOTE HOST : 147.46.35.171 REMOTE ADDR : 147.46.35.171 CLIENT Software : Mozilla/3.0 (WinNT; I) Referer : http://logisys.snu.ac.kr/~keenbee/ex8/cgi01.html

  13. User Requests a form User fills out form Sends form to client User submits form Forward to CGI application Output to Server Output Received Output to client User Web Browser(Client) Server Application (CGI) Input to CGI • Form을 이용하여 Data를 처리하는 과정

  14. Input to CGI • Query String • URL뒤에 추가된 Form 데이터. • 예) http://some.machine/cgi-bin/name.pl?fortune • 첫번째 ? 뒤의 모든 데이터를 Query String이라 한다. • CGI 프로그램은 QUERY_STRING이라는 환경변수를 참조하여, Query String을 얻을 수 있다. • Query String v.s. Security Problem • Hacker에 의해 시스템 정보를 유실당할 수 있다. • rm -fr /과 같은 Code를 밖에서 인위적에서 입력하면, System의 모든 file이 삭제될 수도 있다.

  15. Input to CGI • Simple Form의 예. <HTML> <HEAD><TITLE> Simple Form </TITLE></HEAD> <BODY> <H1> 간단한 Form </H1> <HR> <FORM Action=“/cgi-bin/ex1.pl” Method=“GET”> Command <Input Type=“text” Name=“command” SIZE=10> <BR> <Input Type=“submit” Value=“submit”> <Input Type=“reset” Value=“clear”> </FORM> <HR> </BODY> </HTML>

  16. Input to CGI • GET과 POST의 차이 (REQUEST_METHOD) • GET을 사용하는 경우, #!/usr/local/bin/perl print “Content-type: text/plain”,”\n\n”; $query_string = “ENV{‘QUERY_STRING’}; • http://some.machine/cgi-bin/ex1.pl?command=dir • POST를 사용하는 경우, #!/usr/local/bin/perl $size_of_form_information = $ENV{‘CONTENT_LENGTH’}; read(STDIN, $form_info, $size_of_form_information);

  17. Input to CGI • Encoded Data • GET을 이용하여 정보를 얻는 경우, URL에 붙는 데이타는 Encode된다. • Encode된 Data의 예 • exam date field에 11/13/96를 입력한 경우 • exam=11%2F%13%2F96

  18. Output From CGI • CGI Program의 Output • Simple Document를 출력할 수 있다. • Plain Text • HTML Document • 그림 혹은 그외의 이진데이타(영상, 소리, 등등)를 출력할 수 있다. • Client에게 HTTP Status Code를 보낼 수 있다. • Server에게 특정 Document를 Client에게 보내도록 지시할 수 있다.

  19. <form> tag & CGI - I • (Form을 지원하는) CGI의 사용 목적 • Data Collection • Interactive Communication • Form 사용의 잇점 • Platform Independent한 User Interface • 다양한 Gateway(Database, Information Server)에 대한 접근. • Form 사용의 문제점 • text type이외의 데이터 type에 대한 지원이 안된다. • int, data, float, url 등의 데이터 type을 명확하게 지정하지 못한다. • User Input을 Client Side에서 Check하지 못하고 있다.

  20. <form> tag & CGI - II • HTML Tag & Form Tag • Form을 구성하기 위해서는 <FORM> </FORM> tag를 사용한다. • <FORM>와 </FORM> 사이에서는, 데이타입력 Widget을 지정한다. • Simple Text Input Box • Text • Password • Hidden • Button • Submit • Reset • Check Box & Radio Button • TextArea Box • Scrolled List (Single, Multiple)

  21. <form> tag & CGI - III • <form>Tag • Form의 시작과 끝에는 <HR>을 추가하는 것이 바른 예의임. • 형식 : <FORM ACTION=“CGI-URL” METHOD=“POST 또는 GET”> • ACTION : CGI Program의 위치와 CGI Program명을 적어준다. • ACTION을 지정하지 않으면, Document의 URL이 사용된다. • 예) ACTION=“../cgi-bin/cgi-01.pl” • METHOD : POST 또는 GET을 지정해준다. • POST를 사용하는 것을 많은 전문가들이 권장하고 있음. • 값을 적지 않으면 GET이 Default 값으로 사용됨. • 예) METHOD=“POST”

  22. <form> tag & CGI - 예제 (1) • Simple Text Input Box <HTML> <HEAD><TITLE> FORM-CGI TEST1 </TITLE> </HEAD> <BODY> <H1> 간단한 Form </H1> <HR> <FORM Action=“/cgi-bin/cgi05.pl” Method=“PUT”> Command <Input Type=“text” Name=“name” Size=10> <BR> <Input Type=“submit” Name=“submit”> <Input Type=“reset” Name=“clear”> </FORM> <HR> </BODY> </HTML>

  23. <form> tag & CGI - 예제 (20) • Decoding Process의 절차 1. Request Protocol이 무엇인지 확인한다. • REQUEST_METHOD가 POST인지 GET인지... 2. Protocol이 GET이면, • Query를 QUERY_STRING에서 읽어들이고, PATH_INFO를 참조한다. 3. Protocol이 POST이면, • Request의 길이를 CONTENT_LENGTH에서 읽어들인 후, • Request를 표준입력 Data Stream에서 읽어들인다. 4. Query String을 &단위로 잘라내고, 해석한다. • (key=value&key=value...) 5. Hexadecimal 및 + character를 해석한다. 6. key를 Index로 하여, key-value table을 유지한다.

  24. CGI 예제 - ‘Hello World!’ (1) • ‘Hello World!’ 출력 CGI 예제 • 상황 : Unix 상에 web server를 가지고 있는 경우 • 다음과 같은 간단한 C 프로그램을 작성한다. #include <stdio.h> #include <stdlib.h> void main(argc, argv) int argc; char *argv[]; { char c; int i, cl; printf("Content-type: text/plain%c%c", 10, 10); printf("Hello Wordl!"); }

  25. CGI 예제 - ‘Hello World!’ (2) • 적당한 directory에 C 프로그램을 옮기고, compile한다. • directory : /public_html 또는 /public_html/cgi-bin • compile • # cc -o hw2.cgi hello.c • # chmod 775 hw2.cgi -rw-rw-r-- 1 sungie sungie 185 Jun 10 15:55 hw2.cgi -rwxrwxr-x 1 sungie sungie 3976 Jun 10 15:56 hw2.cgi* • CGI 프로그램 ‘hw.cgi’를 실행시켜 본다. (Web browser 사용) • URL : http://san.hufs.ac.kr/~dmshin2/cgi-bin/hw2.cgi

More Related