http 서버에서 cgi프로그램을 구동가능하게 하는 방법
글쓴이: joonix / 작성시간: 금, 2006/06/09 - 10:40오후
제가 지금 현재 리눅스 상에서 C로 http 서버를 제작중입니다.
소켓을 이용해서 클라이언트(웹브라우저)가 리퀘스트를 서버로 보내면 서버가 리퀘스트를 받고
HEAD인지 GET인지 POST인지 구분해서 헤더를 만들고 다시 클라이언트에게 필요한 파일을
붙여서 보내는 그런 형식입니다.
지금 여기까진 어떻게 어떻게 해서 거의 완성을 했는데 이제 문제는 CGI가 돌아가게 하는겁니다.
서버가 클라이언트로 부터 GET또는 POST 요청을 받았을때
예)
GET /test.html?name=name&years=100&ok=submit HTTP/1,0
POST /test.html HTTP/1,0
...
...
name=name&years=100&ok=submit
이런식으로 요청값들을 받는데 제가 이해한거로는 서버가 이 값들을 CGI프로그램에 pipe를
통해 넘겨주고 CGI가 이 값들을 수행해서 다시 서버로 보내고 서버는 다시 클라이언트로
보내서 클라이언트가 FORM태그를 써서 보낸 값들에 대한 결과를 볼수 있게 하는게 되네요.
제가 맞게 이해한건가요? 서버와 CGI프로그램은 pipe를 통해 stdin stdout으로 서로 정보를
주고 받고 한다고 하는데 이 부분을 코딩해야 할것 같습니다. 근데 막상 할려니
뭘 해야할지 감이 안잡히네요.. dup2함수를 써서 어찌 하고 한다던데 참 어렵습니다.
이부분에 대해 여러분들의 조언 부탁드립니다.
그럼..
Forums:
웹서버를 작성하는
웹서버를 작성하는 데에 참고하기에는 다른 웹서버 소스가 최고입니다. apache 정도가 되면 감히 소스를 열어보기가 두려울 정도로 규모가 크지만 작은 크기를 목표로 하는 웹서버들이 다수 존재하기도 하며, 그 중 하나가 thttpd입니다. 소스는 Debian 패키지 페이지 등에서 구하실 수 있으며, libhttpd.c 파일에서 cgi() 함수를 따라가 보시면 원하시는 내용을 생생하게 확인하실 수 있습니다.
----
$PWD `date`
$PWD `date`
감사합니다.
지금 알려주신 thhttpd 소스 다운받아서 파일열어보고 있는데 이것도 상당히 코드가
기네요. 전체적인 흐름은 대충 파악은 했는데 cgi관련 부분은 봐도 잘 이해가 안가는군요.
좀더 시간을 두고 봐야할것 같습니다. 그리고 다시한번 조언 감사드립니다.
monkey httpd 소스를 분석하세요
졸작떄문에 웹서버만들고 있는데요..
thttpd는 이해하기 힘들더군요.
monkey httpd 라고 소스포지에서 검색해보세요
소스도 알아보기쉽고 정리도 깔끔하게 되어있습니다.
cgi는 웹서버쪽에서 프로세스를 실행시키는 것이에요. 실행시킬때 필요한 환경변수를
넣어주고요.. 파이프를 생성해서 자식프로세스가 표준아웃으로 출력하는것을 읽어서
보내주면 될거 같습니다
댓글 달기