TIL-2024/05/06

박상우·2024년 9월 1일
0

📝 TIL

목록 보기
30/45
post-thumbnail

CSAPP 11.5 웹 서버

11.5.1 웹 기초

  • 웹 클라이언트와 서버는 HTTP라는 텍스트 기반의 응용 수준 프로토콜을 활용하여 상호 연동한다.
  • 기존 파일 전송 프로토콜(FTP)와 달리 HTML을 통해 웹 컨텐츠를 전송한다는 차이점이 있다. HTML에 포함된 명령(태그)를 통해 브라우저에서 어떻게 화면에 컨텐츠를 보여줄건지 알려준다.

11.5.2 웹 컨텐츠

  • 웹 클라이언트와 서버에게 있어서, 컨텐츠는 MIME 타입을 가지는 바이트 배열이다.
    • 정적 컨텐츠 처리 - 디스크 파일(정적 컨텐츠)을 가져와서 내용을 클라이언트에게 보내주는 작업
    • 동적 컨텐츠 처리 - 실행 파일을 돌리고, 그 출력(동적 컨텐츠)을 클라이언트에게 보내주는 작업
  • 웹 서버가 리턴하는 내용은 서버가 관리하는 파일과 연관되고, 이 파일들은 URL(Univeral Resouce Location)이라는 고유 이름을 가진다.
  • URL 구조
→ 파일 이름 뒤 `?`와 `&`를 활용하여 인자를 넘겨줄 수 있다.
  • 서버가 URL의 접미사를 해석하는 방식
    • 정적/동적 콘텐츠에 대한 표준 규칙은 없다. 디렉토리를 지정함으로서 관리파일이 정해지며, 모든 실행파일은 해당 디렉토리 내부에 있어야한다.
    • 최소한의 URL은 ‘/’이며, /index.html 처럼 기본 홈페이지를 가리키도록 확장한다.

11.5.3 트랜잭션

HTTP의 경우 리눅스 TELNET(인터넷, 로컬 네트워크 연결에 쓰이는 프로토콜)프로그램을 사용해서 인터넷 상의 모든 웹 서버와 트랜잭션 가능하다.

HTTP 요청

요청시 요청헤더를 통해 서버에 브라우저의 이름이나 브라우저가 이해하는 MIMT 타입의 추가정보를 제공한다.

header-name: header-data

header 중 *host* 헤더는 프록시 캐시에 의해 사용되고, 이는 브라우저와 웹 서버 사이에서 중간자 역할을 한다. 그리고 프록시는 여러개 존재할 수 있다.(프록시 체인)

HTTP 응답

응답 헤더를 통해 응답에 대한 추가 정보를 제공한다.

  • Content-Type : 응답 본체 내 컨텐츠의 MIME 타입
  • Content-Length: 응답 본체의 크기를 바이트로 표현

11.5.4 동적 컨텐츠의 처리

어떻게 클라이언트는 프로그램 인자를 서버에 전달하는가?
→ 일반적으로 인자를 URL을 통해 전달한다. 인자와 주소를 ?로 구분하고, 인자와 인자를 &로 구분한다.

어떻게 서버는 인자들을 자식으로 전달하는가?

→ 서버가 GET /cgi-bin/adder?15000&213 HTTP/1.1 같은 요청을 받게 되면, 이 서버는 자식 프로세스를 만들기 위해 fork 함수를 사용하고, 그 다음 execve 함수를 사용해서 /cgi-bin/adder 프로그램을 자식 프로세스에서 실행합니다. adder와 같은 이런 프로그램들은 CGI(Common Gateway Interface) 표준을 준수하기 때문에 CGI 프로그램이라고 일컬어집니다. execve 함수를 호출하기 전에, 자식 프로세스는 CGI 환경 변수인 QUERY_STRING을 "15000&213"으로 설정합니다. 이는 실행 시 adder 프로그램이 리눅스의 getenv 함수를 통해 참조할 수 있는 값입니다.

자식은 자신의 출력을 어디로 보내는가?

→ CGI 프로그램은 자신의 동적 컨텐츠를 표준 출력으로 보낸다. 자식 프로세스는 CGI 프로그램은 로드하고 실행하기 전에 dup2 함수를 사용해서 표준 출력을 클라이언트와 연결된 file descriptor로 재지정한다. 이로 인해서 CGI 프로그램의 표준 출력이 모두 클라이언트로 직접 향하게 된다.

profile
나도 잘하고 싶다..!

0개의 댓글