2024. 5. 6. 22:47ㆍ크래프톤 정글 5기/공부
GIT
1. main()
- 주어진 포트 번호로 listening socket 생성 후, 반복적으로 request 처리
2. doit()
- HTTP request 처리
3. read_requesthdrs()
- HTTP request Header 읽음
4. parse_uri()
- URI 분석
5. get_filetype()
- 파일 이름으로부터 파일 타입을 결정
6. serve_static()
- 정적 컨텐츠를 제공
7. serve_dynamic()
- 동적 컨텐츠 제공
8. cgi-bin/addr.c
- 2개의 숫자를 더하는 CGI 프로그램 코드
9. home.html
10. localhost:[port number] access
make
./tiny [port number]
Chrome -> localhost:[port number]
11. test CGI
[server]
./tiny [port number]
[client]
telnet localhost [port number]
GET /cgi-bin/adder?15000&213 HTTP/1.0
(1줄 공백 엔터)
# 숙제문제 11.6.C
- 브라우저 HTTP 버전 체크
request : HTTP/1.1
response : HTTP/1.0
-> 요청 응답 프로토콜 버전이 달라도 되는건가 ?
대부분 현대 웹 브라우저는 HTTP/1.1을 사용하고, Tiny 웹 서버는 HTTP/1.0 기반으로 구현되었기 때문에
요청은 HTTP/1.1 , 응답은 HTTP/1.0으로 출력되는 것
HTTP/1.1 :
지속적인 연결이 기본으로 사용 -> 여러 요청을 하나의 연결로 처리 가능
청크 인코딩, 가상 호스팅 등의 기능이 추가
HTTP/1.0 :
여러 요청이 들어오면 하나의 연결로 처리 X -> 각자 새로운 연결로 처리
-> 호환되어 동작할 수 있다 ~
# 숙제문제 11.7
- MPG 비디오 파일 처리하도록 수정
home.html 파일에 비디오 포맷 추가
tiny.c 파일에 get_filetype() 함수에 [파일명에 mp4 들어갈 경우] 케이스 추가
(home.html 파일에 비디오 포맷만 추가한 상태로도, 동작은 잘 되긴 했다)
# 숙제문제 11.9
- serve_static()에서 [mmap, munmap] 쓰지 말고 [malloc, free] 쓰는걸로 변경
해당 파트는 response Body를 (클라이언트에게 보내기 위해) 입력받은 파일 디스크립터로 넣어야 하는 과정
mmap() | malloc() | |
동작 방식 | 가상 메모리 안의 힙 영역에 메모리 할당 | 가상 메모리 공간에 매핑 매핑된 메모리는 파일 내용 직접 반영 |
메모리 할당 단위 | 바이트 단위 | 페이지 단위 (배수 맞춰야함) |
할당 가능 메모리 크기 | 힙 영역의 크기에 따라 제한 | 가상 메모리 공간의 크기에 따라 제한 |
할당 메모리 초기화 | 초기화 X | 매핑 과정에서, 파일 내용으로 초기화 |
메모리 해제 | free() | munmap() |
용도 | 일반적 메모리 할당 프로그램에서의 동적 메모리 할당에 적합 |
파일이나 장치를 메모리에 매핑 대용량 파일 처리 / 파일 직접 매핑으로 빠름 |
malloc() 이후, Rio_readn() 함수를 거쳐 [할당된 메모리 공간에 파일의 내용을 읽는 과정] 추가해야 함
# 숙제문제 11.10
- CGI adder 함수에 대한 HTML 코드 수정
n1, n2를 num1, num2라는 변수로 설정한 이후
home.html 파일에 "GET" method, action = "cgi-bin/adder" 설정 이후 코드를 수정해야 함
#숙제문제 11.11
- GET method 이외에도, HEAD method 처리 가능하게 코드 수정
serve_dynamic(), serve_static() 파트에서 response head - response body 사이에 넣어주면 된다
doit() 파트에서 [GET method가 아닐 경우에] 수행되던 예외 처리 조건문에, HEAD method도 && 처리 해주면 된다
'크래프톤 정글 5기 > 공부' 카테고리의 다른 글
[PintOS] Project 1 키워드 정리 (Race Condition, Context Switching, PCB, Process State) (0) | 2024.05.10 |
---|---|
CSAPP: Network Programming (1) | 2024.05.07 |
[Webproxy-lab] Echo server communication (0) | 2024.05.04 |
System Call (+ OS, Kernel) (0) | 2024.05.01 |
Malloc-lab (realloc 개선) (0) | 2024.04.30 |