LabHub

네트워크 기초 — 리눅스 VM 에서 손으로 · HTTP 와 종합 · 실습

HTTP 요청을 손으로 쓴다

LabHub 에서 이어서 보기

이 실습은 VM 에서 돕니다

python3 -m http.server 로 작은 웹 서버를 띄우고, 브라우저 없이 nc
요청을 직접 타이핑합니다. HTTP 는 텍스트라서 그것이 됩니다.

목표

요청 줄·헤더·빈 줄의 구조를 손으로 만들고, 200·301·404·501 응답을 직접
받아 보고, curl -v 가 보여 주는 것과 대조합니다.

왜 중요한가

HTTP 는 TCP 위의 텍스트입니다. 요청 한 줄, 헤더 몇 줄, 빈 줄 하나 — 그게
전부입니다. 이 구조를 손으로 만들어 본 사람은 프록시가 헤더를 바꿔치기할 때,
Host 가 틀려 엉뚱한 사이트가 나올 때, 리다이렉트가 돌 때 무엇을 봐야 할지
압니다. curl -v>< 를 읽을 줄 아는 것이 API 디버깅의 절반입니다.

단계

1. /root/http/www/index.html/root/http/www/docs/guide.txt 를 만들고 /root/http/www127.0.0.1:8080 에서 서비스하는 python3 -m http.server 를 띄우세요(로그는 /root/http/server.log 로).
2. ncGET / HTTP/1.1 요청을 직접 써서 보내고 응답 전체를 /root/http/get.txt 에 저장하세요.
3. 없는 경로 /missing 을 요청해 404 응답을 /root/http/notfound.txt 에 저장하세요.
4. HEAD / 요청의 응답을 /root/http/head.txt 에 저장하세요. 헤더는 있고 본문은 없어야 합니다.
5. 끝에 슬래시가 없는 /docs 를 요청해 301 과 Location 헤더가 담긴 응답을 /root/http/redirect.txt 에 저장하세요.
6. curl -v/docs/guide.txt 를 받아 요청·응답 헤더가 모두 담긴 출력을 /root/http/curl.txt 에 저장하세요.
7. curl -o /dev/null -w '%{http_code}'/·/docs·/nope 의 상태 코드를 /root/http/codes.txt경로=코드 세 줄로 저장하세요.
8. /root/http/report.mdstatus_ok=·status_redirect=·status_missing= 세 줄과 함께 요청의 세 부분(요청 줄·헤더·빈 줄)이 각각 무엇인지 적으세요.

참고

단계 8개

  1. 작은 사이트
  2. GET 을 손으로
  3. 없는 것을 달라고 하면
  4. HEAD
  5. 301 과 Location
  6. curl -v 로 읽는다
  7. 상태 코드만
  8. 무엇을 배웠나