HTTP(Hypertext Transfer Protocol): 웹 서버와 웹 브라우저 간의 통신을 위한 응용 계층의 프로토콜
Client / Server 모델을 가진다.
- Client: 원하는 웹 페이지나 객체(예: HTML 문서, 이미지, 스크립트 파일)를 HTTP 요청을 통해 서버에 요청하고 웹 브라우저에 Display 한다.
- Server: 해당 요청을 받고, 요청된 객체를 찾아서 클라이언트에게 응답
HTTP uses TCP
- 3-Way handshaking을 통한 연결을 수립 → 데이터를 주고 받기 → 4-Way handshaking을 통한 연결 종료
HTTP is Stateless
- 서버는 클라이언트의 이전 요청에 대한 정보를 유지하지 않는다.
- 확장성: 개별 클라이언트의 세션 정보를 유지할 필요가 없기 때문에 매번 들어오는 클라이언트의 요청에 어느 서버가 응답하더라도 상관이 없어진다.
→ 서버가 장애가 발생하더라도, 해당 요청을 다른 서버에서 처리함으로써 영속성을 유지 할 수 있다.- 서버에 클라이언트에 대한 정보가 없으므로, 클라이언트는 필요한 데이터를 얻기 위해 한 번에 많은 양의 데이터를 전달해야 한다.
→ 쿠키, 세션 등으로 어느정도 해결 할 수 있음
HTTP connections: two types
- Non-persistent HTTP (HTTP 1.0): 하나의 TCP 연결에 하나의 객체만 요청하고 응답 받을 수 있다.
- 여러 개의 객체를 요청하고 응답 받으려면 해당하는 수만큼 TCP 연결이 필요하다.
→ TCP Connection 오베허드 발생- Response Time = 1 RTT(TCP 연결) + 1 RTT(Object 요청 & 응답) + file Transmission Delay
→ RTT(Round-Trip Time): 클라이언트가 서버로 패킷을 보내고 응답을 받을 때까지 걸리는 시간(전송 완료 시점 ~ 응답 받는 시점까지로 Transmission Delay 제외)
- Persistent HTTP (HTTP 1.1): 하나의 TCP 연결을 통해 여러 객체를 요청하고 응답받을 수 있다.
- 연결을 종료하지 않는 한 연결을 계속 유지
- Response Time = 1 RTT(최초 TCP 연결시에만) + 1 RTT(Object 요청 & 응답) + file Transmission Delay
HTTP format
- request line: 요청 메서드 (GET, POST, 등), URL, 및 HTTP 버전이 포함
→ cr: 처음으로 돌아가기, lf: 새로운 line으로- header: 요청의 메타데이터가 포함되며, 언어, 인코딩 방식, 쿠키 등
- body: 실제 요청 데이터 본문
HTTP method: 요청 메시지의 요청 라인(request line) 부분에 명시하여, 해당 메시지가 어떤 동작을 수행해야 하는지를 나타내는 역할
- GET : 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT: 리소스를 대체(덮어쓰기), 해당 리소스가 없으면 생성
- PATCH: 리소스 부분 변경 (PUT이 전체 변경, PATCH는 일부 변경)
- DELETE: 리소스 삭제
- HEAD: header 정보만 요청
HTTP response message: 클라이언트가 웹 서버에 보낸 HTTP 요청에 대한 응답
- 상태 라인 (Status Line): HTTP 버전, 상태 코드 및 상태 메시지로 구성
- 응답 헤더 (Response Headers): 다양한 응답 메타데이터가 포함된 헤더 정보
→ Content-Type 헤더는 응답 본문의 미디어 유형을 정의하며, Content-Length는 응답 본문의 길이를 지정- 응답 본문 (Response Body): 실제 응답 데이터 또는 컨텐츠
HTTP Status code: HTTP 요청에 대한 서버의 응답 상태를 나타내는 숫자 코드
- 1xx (Informational): 조건부 응답
→ 요청이 현재 처리중인 상태를 의미한다.- 2xx (Successful): 성공
→ 200 OK: 요청을 정상적으로 처리했음을 의미한다.
→ 201 Created: 요청이 성공하고 새로운 리소스가 생성되었음을 의미- 3xx (Redirection): 리다이렉션 완료
→ 301 Moved Permanently 요청한 리소스의 URI가 변경되어서, 새로운 location 정보를 알려준다.
→ 304 Not Modified: 요청한 리소스가 수정되지 않아서 본래 서버가 아닌 프록시 서버로부터 캐싱 된 정보를 클라이언트는 받게 된다.- 4xx (Client Error): 요청 오류
→ 400 Bad Request: 클라이언트의 요청이 잘못되었음을 의미
→ 404 Not Found: 요청한 정보를 서버에서 찾을 수 없음을 의미- 5xx (Server Error): 서버 오류
→ 500 Internal Sever Error: 서버에 오류가 발생하여 해당 요청을 처리할 수 없는 상태