MIME Type, 정적, 동적, CGI

민픽minpic·2023년 5월 21일
0

[TIL] Today I Learned

목록 보기
19/25

웹 컨텐츠

웹 클라이언트와 서버에게, 컨텐츠는 연관된 MIME는 (multipurpose internet mail extensions) 타입을 갖는 바이트 배열이다.

! 여기서 MIME는 전자 우편을 위한 인터넷 표준 포맷이다.
다음 그림은 MIME 타입의 예이다.

웹 서버는 두 가지 서로 다른 방법으로 클라이언트에게 컨텐츠를 제공한다.

  1. 디스크 파일을 가져와서 그 내용을 클라이언트에게 보낸다.
  2. 실행파일을 돌리고, 그 출력을 클라이언트에게 보낸다.

여기서 1번을 정적 컨텐츠라 말하고, 2번을 동적 컨텐츠라 말한다.

웹 서버가 리턴하는 모든 내용들은 서버가 관리하는 파일에 연관된다. 이 파일 각각은 URL라고 하는 고유의 이름을 가진다.

다음과 같은 URL이 있다면,

http://www.google.com:80/index.html

클라이언트는 다음과 같은 URL 부분을 사용해서 어떤 종류 서버에 접속해야하는지 결정하고, 어디에 서버가 있는지, 서버가 무슨 포트를 듣고 있는지를 결정한다.

http://www.google.com:80

서버는 다음과 같은 URL 부분을 사용해서 자신 파일 시스템 상의 파일을 검색하고, 이 요청이 정적 또는 동적 컨텐츠에 대한 것인지 결정한다.

/index.html

URL은 정적 또는 동적 컨텐츠를 참조하는지를 결정하기 위한 표준 규칙은 없다. 각각의 서버마다 자신만의 규칙이 있다.

하지만 고전적인 방식은 동적컨텐츠를 찾을 때, cgi-bin 이름을 가진 디렉토리 안에 모든 실행파일이 존재하게 하고, 서버는 디렉토리로 접근하는 것이다.

CGI (Common Gateway Interface)

동적 컨텐츠는 처리 될때, CGI라고 부르는 사실상의 표준으로 설명할 수 있다.

클라이언트가 서버에게 인자를 전달하는 법

GET요청을 위한 인자들은 URL로 전달되고, '?' 인자는 파일이름과 인자를 구분하며, 각 인자는 '&'로 구분한다. 빈칸은 허용되지 않고, 대신 '%20' 스트링으로 표시해야한다.

어떻게 서버는 인자들을 자식에게 전달하나

서버가 요청을 받으면, 서버는 fork 를 호출해서 자식 프로세스를 생성한다.

그 다음 execve 를 호출해서 /cgi-bin/adder 프로그램을 자식의 컨텍스트에서 실행한다.
adder같은 프로그램들은 종종 CGI 프로그램이라고 부르는데, 그 이유는 이들이 CGI표준의 규칙을 준수하기 떄문이다.

그런데 실행하기 전에, 인자값을 받기 위해, CGI 환경변수 QUERY_SRING을 URL에서 받은 인자값으로 설정하고, adder프로그램은 getenv 함수를 호출해서 QUERY_SRING 값을 참조할 수 있다.

그렇다면 자식은 자신의 출력을 어디로 보내나

CGI 프로그램은 자신의 동적 컨텐츠를 표준 출력으로 보낸다.
자식 프로세스가 CGI 프로그램을 로드하고, 실행하기 전에 리눅스 dup2 함수를 사용해서 표준출력을 클라이언트와 연계된 식별자로 재지정한다.

profile
사진찍는 개발자 / 한 가지 개념이라도 깊이있게

0개의 댓글