서버는 클라이언트의 상태를 보존하지 않고, 모든 요청을 독립적으로 처리한다.
여기서는 HTTP/1.1을 다룬다
공식 문서: https://datatracker.ietf.org/doc/html/rfc7230#section-3


Start Line: method SP request-target SP HTTP-version CRLF (SP는 single space, CRLF는 \r\n)
method: 요청 종류
POSTGETPUT(덮어쓰기-전체 교체), PATCH(부분 수정)DELETEHEAD(본문 제외 상태 라인 및 헤더만 요청), OPTIONS(사전 요청-통신 가능한 Method 확인 요청)POST를 많이 쓴다. (예: 로그인 요청)request-target: 요청을 보내는 대상 주소/경로
/index.htmlHTTP-version
- 1.1의 경우 HTTP/1.1
Header: key-value 데이터
Empty Line: CRLF
Message Body: 실제 전송하는 데이터. 모든 바이트 데이터 전송 가능(HTML, 이미지, ...)
GET 요청에 대해선 Message Body가 지원되지 않는 경우가 많다.)
Start Line: HTTP-version SP status-code SP reason-phrase CRLF (예: HTTP/1.1 200 OK)
200, 404OK, Not FoundHeader: Response에서만 사용되는 Header 값들이 따로 존재한다.
메서드를 실행했을 때 데이터가 안전한가?
GET(조회): 데이터를 변환하지 않으니 안전하다.POST, DELETE, PUT, PATCH: 안전하지 않다.몇 번을 호출해도 결과가 항상 같은가?
GET: 몇 번을 조회해도 결과는 같다.PUT: 몇 번을 덮어써도 결과는 같다.DELETE: 같은 요청을 여러 번 해도 삭제된 결과는 같다.POST: 요청한 횟수만큼 데이터가 생성된다. -> 멱등성을 보장하지 않는다.PATCH의 경우 HTTP 스펙 상 구현 방법에 제한이 없어 구현에 따라 멱등할 수도, 그렇지 않을 수도 있다.서버 복구 매커니즘에 사용된다.
요청에 대한 응답을 저장해두고, 동일한 요청에 대해 곧바로 제공할 수 있는가?
GET, HEAD, POST, PATCH 메서드는 캐시가능하다.GET, HEAD 정도만 사용한다.POST나 PATCH는 서버 상태에 변경을 가하므로 캐시와 원본 데이터의 불일치 문제가 생길 수 있다.전부 외우기보단, 100단위로 어떤 의미인지만 파악해두자.
200 OKGET, PUT201 CreatedPOST, PUT(생성)202 Accepted204 No ContentDELETE, PUT(덮어쓰기)400 Bad Request401 Unauthorized403 Forbidden404 Not Found500 Internal Server Error503 Service UnavailableRetry-After 헤더를 통해 복구될 시간을 응답할 수 있음