HTTP 프로토콜

2023. 2. 27. 14:59Computer Science/Network

✅ 아래 내용들에 대해서 알아보자

- HTTP
- HTTP 역사
- HTTP 프로토콜 분석 및 특징
- HTTP 메서드 종류 및 특징

 

HTTP

 HyperText Transfer Protocol의 줄임말로 웹 상에서 웹 서버 및 브라우저 상호 간의 데이터 전송을 위한 OSI 7 Layer의 응용계층에 존재하는 TCP/IP를 이용하는 응용 프로토콜이다.

 

처음에는, 웹 상의 하이퍼텍스트 형태의 문서를 전달하는데 주로 이용했지만 현재에는 이미지, 비디오, 음성, 파일(Json, XML..)등 거의 모든 형태의 데이터 전송이 가능하다. 

 

 

HTTP 역사

- HTTP/0.9(1991년) : HTTP 헤더가 없었으며, GET 메서드로써 문서를 가져오고 연결을 끊는 것이 전부(요청에 바디를 포함하지 않았음)

- HTTP/1.0(1996년) : 초기 개념들 도입(HTTP Header, Method, 응답 코드, 리다이렉트, 비지속 연결 등)

- HTTP/1.1(1997년) : 가장 많이 사용하는 버전 

  • HTTP 헤더 내 Host 필드를 필수 항목으로 함 -> 따라서 1개 IP 주소에 다수의 가상 호스팅이 가능해짐
  • HTTP 메서드 추가 및 조정 
  • OPTIONS, CONNECT, TRACE 추가
  • PUT, DELETE 필수로 됨
  • 캐시 컨트롤, 블록 단위 인코딩 전송 가능
  • 병렬 커넥션 : 여러 TCP 커넥션을 통한 동시 HTTP 처리 (실제 많이 사용됨)
  • 지속 커넥션을 통한 커넥션 재사용 : HTTP 1.0에서는 요청 헤더에 Keep-Alive로 구현됐으나, 1.1부터는 지속 커넥션 접속이 기본 동작이 됨 -> 기존 TCP 연결을 끊지 않음으로, TCP 재연결에 대한 지연 방지
  • SSL/TLS에 의한 암호화 통신 지원 -> HTTP의 보안 버전 HTTPS (도청, 통신, 임의 내용 변경 등 방지)

- HTTP/2(2015년) : 성능 개선

- HTTP/3(진행 중)   : TCP 대신 UDP 사용, 성능 개선 

 

 

 

HTTP 프로토콜 분석 및 특징

 

 1. 클라이언트 서버 구조

- 클라이언트 <-> 서버 간에 HTTP 메시지를 주고받으며 통신한다.

- Reqeust <-> Response 구조로 클라이언트는 서버에 요청을 보내고 응답을 대기, 서버가 요청에 대한 결과를 만들어 응답하는 구조

 

클라이언트 <-> 서버 통신 구조

 

 

 

HTTP Request/Response 메시지

 

 

 

 2. 무상태 프로토콜(Stateless)

- 서버가 클라이언트 상태를 유지하지 않는다.(Stateless)

-> 이러한 단점을 해결하기 위해 Cookie/Session이 등장하였음

 

- 그로 인해 서버 확장성이 높지만(스케일 아웃) 클라이언트의 추가 전송이 필요해진다.

-> 서버가 상태를 저장하지 않기 때문에 장애가 나더라도 다른 서버에 전송하면 된다.

 

- 아래 그림에서 Stateless 특징으로 중간에 중계서버를 Proxy 서버로 둘 경우 캐싱 처리/필터링/로드 밸런싱 등의 다양한 처리를 할 수 있게 된다.

클라이언트는 중계서버로 요청할 경우 뒤에 존재하는 서버 중 하나라도 정상 작동하는 서버에 Proxy 서버가 요청하게 되고 그로 인해 클라이언트에게 응답을 줄 수 있게 된다.

 

 

Stateless의 장점

 

 

 3. 비 연결성(Connectionless)

HTTP는 기본이 연결을 유지하지 않는 모델이다.

-> 이로 인해TCP/IP 연결(3 Way Handshake)을 새로 맺어야 한다. 따라서 시간 증가됨, 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결함(HTTP 2/3에서 더 많은 최적화 진행 중)

 

- 일반적으로 초 단위 이하의 빠른 속도로 응답

- 서버 자원을 효율적으로 사용할 수 있게 된다.

 

 

HTTP 지속 연결 전/후

 

 

 

HTTP 메서드 종류 및 특징

 HTTP Method의 속성에는 크게 3가지 안전(Safe), 멱등(Idempotent), 캐시 가능(Cacheable)이 있다.( 참고)

아래는 HTTP 메서드 종류 및 특징을 표로 정리하였음

 

 

메서드 종류 특징
GET URL 형식으로 웹서버에  리소스 요청(조회, 취득)

* Conditional GET이란? 
 - 최초 리소스를 요청할 때는 요청만 하고 이후 요청 때는 첫 요청의 응답에 함께 온 HTTP 헤더 정보를 참고하여 변경사항이 있는지 물어보는 GET 
 - 캐싱에 중요한 HTTP 헤더 정보(Last-Modified, eTag 등)이 있다.



 - 예시) GET /search?q=hello&hl=ko HTTP 1.1 HOST:www.google.com
 - URL에 서버에 전달하고 싶은 데이터를 query(여기선, ?q=hello&hl=ko) 를 통해서 전달)
HEAD HTTP 메시지 헤더만 정보 요청(HTTP 응답 메시지에 Body가 없음)
 - 해당 자원이 존재하는지 혹은 서버에 문제 없는지 확인용 으로 사용
POST 클라이언트에서 서버로 데이터 전송, 등록(파일 전송도 가능)
 - 요청 Data를 HTTP Body에 담아 전송하게 된다
 - 이때 HTTP 헤더에 보내는 타입에 맞게 Content-Type이 설정 됨
 - 만일 요청된 리소스가 새로 만들어지는 것이라면 서버측은 HTTP 헤더 항목 중 'Location:' 에 새로 만들어진 리소스에 대한 URL 정보를 포함시켜 응답함
PUT 데이터 내용 갱신, 데이터(리소스) 없으면 생성
 - POST와 형식은 동일하나, 주로 자원의 전체 갱신 위주
 - POST와 달리 개싱된 리소스에 대한 URL을 HTTP 헤더 항목 중 Location에 보내지 않아도 됨
PATCH PUT가 달리 데이터(리소스) 일부분 부분 변경 시 사용
DELETE 데이터(리소스) 삭제
OPTIONS 웹서버가 지원하는 가능한 메서드 옵션에 대한 질의(주로 CORS에서 사용)
TRACE 요청 리소스에 대한 경로를 보여줌
CONNECT Proxy 서버와 같은 중간 서버에게 중계 연경 요청 시 사용

 

 

 


참고자료

반응형

'Computer Science > Network' 카테고리의 다른 글

HTTP Method 안전성, 멱등성, 캐시성 이해하기  (0) 2023.02.28
URI, URL ,URN 뭐가 다를까?  (0) 2023.02.27
TCP/IP  (0) 2022.05.05
Http 상태 코드 정리  (0) 2022.04.10