9강 / 20강
HTTP — 웹의 주문서
브라우저와 서버가 주고받는 말의 형식
여기까지 오면서 우리는 신호 → 패킷 → IP → 라우팅 → TCP → 포트를 지나왔습니다. 드디어 진짜 하고 싶은 말을 할 차례예요.
손님의 브라우저가 서버에게 보내는 말은 놀랄 만큼 단순한 글자입니다.
GET /products/12 HTTP/1.1
Host: mallshop.kr
User-Agent: Mozilla/5.0 (iPhone)
Accept: text/html
(빈 줄 — 여기까지가 헤더)
서버의 대답도 마찬가지입니다.
HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Content-Type: text/html
Content-Length: 1834
(빈 줄)
<!doctype html><html>… 실제 페이지
-v 를 붙이면 주고받은 헤더가 전부 보입니다.
💻 손님 노트북
브라우저 안에서 실행 (계산용)
Host 헤더 — 서버 한 대에 사이트 여러 개
요청의 Host: 줄이 왜 필요할까요? IP로 이미 찾아왔는데 말이죠.
서버 한 대에 사이트를 여러 개 올릴 수 있기 때문입니다.
mallshop.kr 과 blog.mallshop.kr 이 같은 IP를 가리켜도,
nginx는 Host 헤더를 보고 어느 설정을 쓸지 고릅니다. 12강의 server_name 이 그것이에요.
운영자가 외워야 할 상태 코드
2xx 성공
200 OK · 201 Created3xx 다른 데로 가세요
301 영구 이사 · 302 잠깐 · 304 안 바뀜4xx 손님 잘못
400 · 403 금지 · 404 없음 · 429 너무 많음5xx 서버 잘못
500 앱 오류 · 502 뒷단 죽음 · 503 과부하 · 504 뒷단 느림4와 5의 구분이 결정적입니다. 404가 잔뜩 찍힌다면 대개 손님(또는 봇)이 없는 주소를 찾는 것이고, 502가 찍힌다면 우리 잘못이라 지금 당장 봐야 합니다.
-I 는 헤더만 받습니다 (본문 없이 상태만 확인할 때).
💻 손님 노트북
브라우저 안에서 실행 (계산용)
진짜 요청을 들여다봅시다
지금까지는 가상 서버였습니다. 이번에는 여러분의 브라우저가 방금 진짜로 보낸 요청을 이 사이트의 서버가 그대로 되돌려 줍니다. 시뮬레이션이 아니에요.
🤔 확인 문제
접속 로그에
502 가 갑자기 쏟아집니다. 가장 먼저 확인할 것은?해설 502는 nginx는 멀쩡한데 뒷단이 응답을 못 준다는 뜻입니다.
sudo systemctl status mallshop 과 ss -tulpn | grep 8000 이 첫 두 명령이에요.🤔 확인 문제
서버 한 대에
mallshop.kr 과 blog.mallshop.kr 을 같이 올렸습니다. nginx가 둘을 구별하는 근거는?해설 두 이름이 같은 IP·같은 80 포트를 가리켜도, 요청마다 Host 헤더가 다릅니다. nginx는 이 값을
server_name 과 맞춰 보고 설정을 고릅니다. 이것이 가상 호스트예요.