9강 / 20강

HTTP — 웹의 주문서

브라우저와 서버가 주고받는 말의 형식

HTTP — 웹의 주문서
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 를 붙이면 주고받은 헤더가 전부 보입니다.
💻 손님 노트북 브라우저 안에서 실행 (계산용)
HTTP 요청 조립기 — 메서드·헤더·상태코드를 직접 만들어 봅니다
불러오는 중…

Host 헤더 — 서버 한 대에 사이트 여러 개

요청의 Host: 줄이 왜 필요할까요? IP로 이미 찾아왔는데 말이죠.

서버 한 대에 사이트를 여러 개 올릴 수 있기 때문입니다. mallshop.kr 과 blog.mallshop.kr 이 같은 IP를 가리켜도, nginx는 Host 헤더를 보고 어느 설정을 쓸지 고릅니다. 12강의 server_name 이 그것이에요.

운영자가 외워야 할 상태 코드

2xx 성공
200 OK · 201 Created
3xx 다른 데로 가세요
301 영구 이사 · 302 잠깐 · 304 안 바뀜
4xx 손님 잘못
400 · 403 금지 · 404 없음 · 429 너무 많음
5xx 서버 잘못
500 앱 오류 · 502 뒷단 죽음 · 503 과부하 · 504 뒷단 느림

4와 5의 구분이 결정적입니다. 404가 잔뜩 찍힌다면 대개 손님(또는 봇)이 없는 주소를 찾는 것이고, 502가 찍힌다면 우리 잘못이라 지금 당장 봐야 합니다.

-I 는 헤더만 받습니다 (본문 없이 상태만 확인할 때).
💻 손님 노트북 브라우저 안에서 실행 (계산용)

진짜 요청을 들여다봅시다

지금까지는 가상 서버였습니다. 이번에는 여러분의 브라우저가 방금 진짜로 보낸 요청을 이 사이트의 서버가 그대로 되돌려 줍니다. 시뮬레이션이 아니에요.

진짜 요청 보기 — 지금 이 브라우저가 보낸 헤더 그대로
불러오는 중…
🤔 확인 문제
접속 로그에 502 가 갑자기 쏟아집니다. 가장 먼저 확인할 것은?
🤔 확인 문제
서버 한 대에 mallshop.kr 과 blog.mallshop.kr 을 같이 올렸습니다. nginx가 둘을 구별하는 근거는?