하루에 2 CSAPP다
가히 파멸적이라 볼 수 있다
그렇기에 열심히 안할거다
에코 서버 충분히 봤으니 이제 좀 더 제대로 된 서버 만든다고 한다
𝙃𝙏𝙏𝙋 ᴴʸᵖᵉʳᵗᵉˣᵗ ᵀʳᵃⁿˢᶠᵉʳ ᴾʳᵒᵗᵒᶜᵒˡ
HTTP가 뭐냐?
텍스트 기반 응용 수준 프로토콜이라고 한다
FTP같은 전통적 파일 전송 서비스와 웹 서비스의 차이?
주요 차이점은 𝑯𝑻𝑴𝑳 ᴴʸᵖᵉʳ ᵗᵉˣᵗ ᴹᵃʳᵏᵘᵖ ᴸᵃᶰᵍᵘᵃᵍᵉ이라는 언어로 작성 가능하다는 거다
HTML 프로그램에는 명령어(태그)가 있어 텍스나 그래픽 개체를 어찌 표시할지 알려줄 수 있다
컨텐츠는 MIME타입 + 바이트 배열이란다
웹 서버는 두 가지 방법으로 클라이언트에 컨텐츠를 전달한다
정적(static): 디스크 파일을 그대로 읽어 보내기
동적(dynamic): 실행 파일을 실행해 실행 시점의 출력을 보내기
URL이 뭔지도 나온다
http://www.google.com/index.html
에서 /index.html
이 URL이다
서버가 관리하는 파일 식별하는 용도다
리눅스면 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>
같은 바디 들어간다
동적 컨텐츠 처리에 대한 질문은
ℂ𝔾𝕀 ᴄᴏᴍᴍᴏɴ ɢᴀᴛᴇᴡᴀʏ ɪɴᴛᴇʀғᴀᴄᴇ라는 사실상의 표준으로 설명 가능하단다
GET: ?
뒤에 &
로 구분(%20
등 URL 인코딩 필요)
POST: 인자를 바디에 담음
서버가 fork()
로 자식 생성 → execve()
로 CGI 프로그램 실행
실행 전 환경변수 설정
표준 입출력 리다이렉션
동적 콘텐츠의 타입/길이를 서버가 모를 수 있으므로,
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
```