하나의 요청에 담기는 것
클라이언트는 어떤 자원에 어떤 동작을 원하는지 요청으로 표현한다. GET은 자원의 표현을 가져오는 데 쓰이며, POST 등 다른 메서드는 각자의 의미를 갖는다. 헤더에는 원하는 형식이나 인증 정보 등 처리에 필요한 부가 정보가 담길 수 있다.
서버는 상태 코드와 헤더, 필요한 경우 본문을 돌려준다. 본문이 HTML인지 이미지인지 JSON인지에 따라 클라이언트의 처리 방식이 달라진다. HTTP는 웹 페이지의 모양을 정하는 언어가 아니다.
상태 코드의 의미
상태 코드는 요청의 처리 결과를 분류한다. 200은 성공 응답에 흔히 쓰이고, 404는 요청한 자원을 찾지 못했음을 나타낸다. 리디렉션은 다른 위치를 이용하도록 알리는 응답이다.
상태 코드만으로 응용 프로그램 내부의 모든 결과를 알 수는 없다. API는 본문에 상세한 결과를 넣기도 하므로, 통신 수준의 결과와 서비스 기능의 결과를 함께 해석해야 한다.
상태와 캐시
HTTP의 기본 의미 체계는 각 요청을 독립적으로 해석하도록 설계되어 있다. 로그인 유지처럼 여러 요청에 걸친 상태는 쿠키와 서버 측 세션 등의 방법을 조합해 구현한다.
캐시는 이전 응답을 재사용해 전송과 처리 비용을 줄인다. 어떤 응답을 얼마 동안 재사용할지, 서버에 다시 확인해야 할지는 캐시 관련 규칙과 헤더가 정한다. 개인별 응답은 잘못 공유되지 않도록 구분해야 한다.
버전과 보안 연결
HTTP 버전은 메시지 전달 방식과 연결 활용 방법에서 차이를 보인다. HTTP/3는 QUIC 위에서 HTTP의 의미를 전달한다. HTTPS는 암호화와 서버 인증을 위해 보호된 연결을 사용하는 방식이며, 특정 HTTP 버전의 별칭은 아니다.