Tiny를 수정해서 모든 요청라인과 요청 헤더를 echo하도록 하라
C. Tiny의 출력을 조사해서 여러분이 사용하는 브라우저의 HTTP 버전을 확인해라.


Tiny를 확장해서 MPG 비디오 파을을 처리하도록 하시오. 실제 브라우저를 사용해서 결과 체크하시오.


Tiny를 수정해서 정적 컨텐츠를 처리할 때 요청한 파일을 mmap과 rio_readn 대신에 malloc, rio)readn, rio_writen을 사용해서 연결 식병자에게 복사하도록 하시오.

메모리 매핑 방식(Mmap)
버퍼 기반 방식(malloc)
A. rmfla 11.27의 CGI adder 함수에 대한 HTML 형식을 작성하시오. 이 형식은 사용자가 함께 더할 두 개의 숫자로 채우는 두개의 텍스트 상자를 포홈해야 한다. 여러분의 형식은 GET 메소드를 사용해서 컨텐츠를 요청해야 한다.
B. 실제 브라우저를 사용해서 Tiny로부터 이 형식을 요청하고, 채운 형식을 Tin에 보내고, adder가 생성한 동적 컨텐츠를 표시하는 방법으로 작업 체크하시오.
<html>
<head><title>Adder</title></head>
<body>
<form id="adderForm">
<p>Enter two numbers to add:</p>
<input type="text" id="n1">
<input type="text" id="n2">
<input type="submit" value="Add">
</form>
<script>
document.getElementById('adderForm').addEventListener('submit', function(event) {
// Prevent the default form submission
event.preventDefault();
// Get the values from the input fields
var val1 = document.getElementById('n1').value;
var val2 = document.getElementById('n2').value;
// Construct the custom query string that adder.c expects
var queryString = val1 + '&' + val2;
// Construct the final URL and redirect
window.location.href = '/cgi-bin/adder?' + queryString;
});
</script>
</body>
</html>

두 입력 박스에 숫자를 넣고 제출을 누르면 adder 가 실행된다

처음 자바스크립트를 작성하지 않고 했을 때는 cgi-bin/adder?n1=123&n2=123 키 밸류를 넣게 되어 인식을 못해 자바스크립트를 추가해 밸류만 뽑았다. cgi-bin/adder?123&123
Tiny를 확장해서 HTTP HEAD 메소드를 지원하도록 하라. Telnet을 웹 클라이언트로 사용해서 작업 결과 체크하시오.
Tiny 웹 서버에 HTTP HEAD 메서드를 지원하도록 확장하는 문제로 HEAD는 response body를 반환하지 않고 헤더만 반환하는 메서드다.
if (strcasecmp(method, "GET") && strcasecmp(method, "HEAD")) { ... }
// HEAD 메소드인 경우 플래그 설정
if (strcasecmp(method, "HEAD") == 0) {
is_head = 1;
} else { // GET 메소드인 경우
is_head = 0;
}
if (!is_head) {
// 파일 내용 전송 (HEAD가 아닐 때만)
srcp = malloc(filesize);
Rio_readn(srcfd, srcp, filesize);
Rio_writen(fd, srcp, filesize);
free(srcp);
}
if (is_head) {
// HEAD 요청: 표준 출력을 /dev/null로 리다이렉션
int devnull_fd = Open("/dev/null", O_WRONLY, 0);
Dup2(devnull_fd, STDOUT_FILENO);
} else {
// GET 요청: 클라이언트 소켓으로 리다이렉션
Dup2(fd, STDOUT_FILENO);
}
