jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. CSAPP
  2. 11.5 웹서버
    1. 11.5.1 웹기초
    2. 11.5.2 웹 컨텐츠
    3. 11.5.3 HTTP 트랜잭션
    4. 11.5.4 동적 컨텐츠의 처리
      1. 인자 전달
      2. 서버→자식 프로세스 전달(CGI 규약)
      3. 헤더 책임
      4. 예시 흐름

CSAPP

하루에 2 CSAPP다

가히 파멸적이라 볼 수 있다

그렇기에 열심히 안할거다


11.5 웹서버

에코 서버 충분히 봤으니 이제 좀 더 제대로 된 서버 만든다고 한다

11.5.1 웹기초

𝙃𝙏𝙏𝙋 ᴴʸᵖᵉʳᵗᵉˣᵗ ᵀʳᵃⁿˢᶠᵉʳ ᴾʳᵒᵗᵒᶜᵒˡ

HTTP가 뭐냐?
텍스트 기반 응용 수준 프로토콜이라고 한다

FTP같은 전통적 파일 전송 서비스와 웹 서비스의 차이?

주요 차이점은 𝑯𝑻𝑴𝑳 ᴴʸᵖᵉʳ ᵗᵉˣᵗ ᴹᵃʳᵏᵘᵖ ᴸᵃᶰᵍᵘᵃᵍᵉ이라는 언어로 작성 가능하다는 거다

HTML 프로그램에는 명령어(태그)가 있어 텍스나 그래픽 개체를 어찌 표시할지 알려줄 수 있다


11.5.2 웹 컨텐츠

컨텐츠는 MIME타입 + 바이트 배열이란다

웹 서버는 두 가지 방법으로 클라이언트에 컨텐츠를 전달한다

  • 정적(static): 디스크 파일을 그대로 읽어 보내기

  • 동적(dynamic): 실행 파일을 실행해 실행 시점의 출력을 보내기


URL이 뭔지도 나온다

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

에서 /index.html이 URL이다

서버가 관리하는 파일 식별하는 용도다


11.5.3 HTTP 트랜잭션

리눅스면 TELNET으로 디버깅하기 편하단다


요청(Request) = 요청라인 + 헤더들 + 빈 줄

요청라인은 이렇다 METHOD URI VERSION

  • METHOD: 여기서는 주로 GET만 다룸.

  • URI: URI는 URL의 접미사(파일명 + 선택적 인자).

  • VERSION: VERSION은 HTTP/1.0 또는 HTTP/1.1


헤더는 지금은 Host:만 신경쓰란다 HTTP/1.1에서 쓰이는 프록시인지 뭔지 판단하는 용도다


응답(Response) = 상태라인 + 헤더들 + 빈 줄 + 바디

상태라인: VERSION STRATUS-CODE STATUS-MESSAGE

중요 헤더:

  • Content-Type: MIME 타입

  • Content-Length: 바디 바이트 수


그리고 빈 줄 뒤에 <html> ... </html> 같은 바디 들어간다


11.5.4 동적 컨텐츠의 처리

동적 컨텐츠 처리에 대한 질문은

ℂ𝔾𝕀 ᴄᴏᴍᴍᴏɴ ɢᴀᴛᴇᴡᴀʏ ɪɴᴛᴇʀғᴀᴄᴇ라는 사실상의 표준으로 설명 가능하단다

인자 전달

  • GET: ? 뒤에 &로 구분(%20 등 URL 인코딩 필요)

  • POST: 인자를 바디에 담음

서버→자식 프로세스 전달(CGI 규약)

  1. 서버가 fork()로 자식 생성 → execve()로 CGI 프로그램 실행

  2. 실행 전 환경변수 설정

  3. 표준 입출력 리다이렉션

헤더 책임

동적 콘텐츠의 타입/길이를 서버가 모를 수 있으므로,
CGI 프로그램이 최소 Content-Type / Content-Length + 빈 줄을 직접 출력해야 함

예시 흐름

  • 요청: GET /cgi-bin/adder?15000&213 HTTP/1.0

  • CGI: QUERY_STRING 파싱 → 결과 HTML 생성 →
    ```bash Content-length: 115 Content-type: text/html

...결과...

```