서버/서버 이론

HTTP와 HTTP 메시지

season97 2024. 1. 18. 12:21

HTTP란? (Hyper Text Transfer Protocol)

 

・  서버/클라이언트 모델에 따라 데이터를 주고 받기 위한 응용계층(Application)의 프로토콜로 1990년대 초 WWW(World Wide Web)을 구성하는 핵심 기술로서 개발되었으며, 웹 서버와 클라이언트 사이의 통신을 위해 설계되었다. 

 

[특징]

 

・ 클라이언트가 서버에 요청을 보내고 응답을 대기하는 구조로 서버는 요청에 대한 결과를 만들어 응답한다.

 

무상태 프로토콜

・ 무상태 프로토콜?(Stateless) : HTTP가 서버나 클라이언트의 상태를 확인하지 않는다. 따라서 상태의 확인이 필요할 때 다른 방법을 통해 확인해야 한다(쿠키-세션,API 등 -> 최소한만 사용하는게 좋다)

장점 :  서버 확장성이 높다. 단점 : 클라이언트가 추가 데이터를 전송해야 한다. 

🔖 STATELESS를 기억하자

🏷 1분 1초의 오차도 허용되지 않는 같은 시간에 딱 맞추어 발생하는 대용량 트래픽이 필요한 경우
ex) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록, 아이돌 콘서트 티켓팅
🏷 수만명의 동시 요청을 요구하는 이벤트를 설계할 때 stateless 설계 방식을 이용하게 된다.

 

・ 비 연결성(Connectionless): 실제로 요청을 주고 받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊는다. 

ㄴ> 실제 애플리케이션에는 사용자의 로그인상태와 같은 정보유지가 필요할 때가있다. 이를 위해 쿠키(Cookies),세션(Session),히든 필드(Hidden Fields), 토큰 기반 인증 등의 기술을 사용해 상태 정보를 관리한다. 

 

・ 단순하고 확장이 가능하다.

 

・  HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않은 stateless 프로토콜이며 Method,Path,Version,Headers,Body 등으로 구분된다. 

 

・ HTTP는 암호화 되지 않은 평문 데이터를 전송하는 프로토콜이였기 때문에, HTTP로 비밀번호나 주민등록번호 등을 주고받으면 제3자가 정보를 조회할 수 있는 문제가 있었다.

-> 이 문제를 해결하기 위해 나온것이 HTTPS다. 보안이 중요한 데이터를 주고받을 때는 HTTPS를 사용해 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 를 통해 데이터를 암호화 한다.

[HTPP의 동작 방식]

 

1. Requests(요청) : 사용자가 웹 브라우저를 통해 특정 웹 페이지에 접근하려고 하면, 브라우저는 해당 웹 서버에 HTTP 요청을 전송한다. HTTP 요청 메세지에는(GET, POST, PUT, DELETE 등), 요청하는 리소스의 URL(Uniform Resource Identifier), 프로토콜 버전, 요청 헤더, 요청 본문이 포함된다.

 

2. Responses(응답) : 웹 서버는 클라이언트의 요청을 받아 처리한 후, HTTP 응답 메세지를 클라이언ㅌ트에게 전송한다. 응답 메세지에는 프로토콜 버전, 상태코드(200OK, 404Not Found 등), 상태 메시지, 응답헤더, 응답 본문이 포함된다.

클라<->서버 작동 방식

 

 

3. Methods(메소드) : HTTP는 다양한 요청 메소드를 정의하여 서버에 대한 다양한 작업을 수행할 수 있게 한다. 예를들어 GET 메소드는 리소스 요청, POST는 리소스 생성, PUT은 리소스 업데이트 DELETE는 리소스를 삭제할 때 사용한다.

 

4. Status Codes(상태코드) : 서버는 응답 메시지의 상태 코드를 통해 요청의 결과를 알려준다. 상태 코드는 1xx(정보), 2xx(성공), 3xx(리다이렉션), 4xx(클라이언트 에러) 5xx(서버 에러)로 분류된다 (404?)

 

5. Headers(헤더) : HTTP 요청과 응답 모두에는 메타데이터를 포함하는 헤더가 포함된다. 이 헤더들은 캐싱, 인증, 콘텐츠 협상, 쿠키 등의 다양한 목적으로 사용된다.

 

6. Versions(버전)  HTTP/1.0은 초기 버전으로 각 요청마다 새로운 TCP 연결을 열었다, HTTP/1.1은 지속 연결파이프라이닝을 도입해 효율성을 개선했으며, HTTP/2 는 멀티플렉싱, 서버푸시, 헤더압충 등을 도입해 성능을 크게 향상했다.


[HTTP/1.1]

⌘ 지속연결 : 'Connection: keep-alive' 헤더를 통해 하나의 TCP 연결을 통해 여러 HTTP 요청과 응답을 처리할 수 있게 해준다. 연결오버헤드를 줄이고 성능을 향상시켰다

 

⌘ 파이프라이닝 : 지속 연결이 가능해진 HTTP/1.1에서 여러 요청을 연속적으로 보낼 수 있는 파이프라이닝 기능. 클라이언트는 여러 요청을 서버에 차례로 보낼 수 있으며, 서버는 이를 순차적으로 처리하고 응답한다. 그러나 요청의 순서대로 응답해야 하기에 첫번째 요청처리가 지연되면 나머지 응답도 지연되는 'Head-of-Line Blocking' 문제가 있었다.

 

[HTTP/2]

⌘ 멀티플렉싱(Multiplexing) : 하나의 TCP 연결 안에 여러개의 메세지를 동시에 양방향으로 전송할 수 있다. 각 메시지는 Stream 이라는 독립된 단위로 분리되며 이 스트림들은 서로 다른 속도로 전송될 수 있다. Head-of-Line Blocking문제를 해결하고 네트워크 사용 효율성을 향상시켰다.

 

⌘ 서버푸시(Server Push) : 서버는 클라이언트의 요청에 대한 응답뿐만 아니라, 클라이언트가 필요로 할 것으로 예성되는 추가 리소스(이미지, 스타일시트 등) 도 미리 보낼 수 있는 기능으로 웹 페이지 로딩 시간을 줄이는데 기여했다.

 

⌘ 헤더 압축(Header Compression) : 1.1에서는 매 요청과 응답마다 반복되는 헤더 정보가 많은 대역폭을 차지하는 문제가 있었는데 2에서는 HPACK 압축 포맷을 사용해 헤더 정보를 압축하고 전송되는 데이터 양을 줄였다.

 

 

 

HTTP 자체가 암호화를 제공하지 않지만, HTTPS를 통해 보안 계층을 추가하여 안전한 데이터 전송

🔖 클라이언트 - 서버 구조 요약

🏷 REQUEST RESPONSE 구조
🏷 클라이언트는 서버에 요청을 보내고, 응답을 대기
🏷 서버가 요청에 대한 결과를 만들어서 응답


 

[HTPP Message]

・ 웹 브라우저, API 클라이언트, 서버 사이드 스크립트, 네트워크 통신을 다루는 다양한 프로그래밍 언어와 라이브러리에 의해 자동으로 생성되고 처리되는 경우가 많다. 직접 HTTP 메세지를 작성하고 확인하려면 F12 (개발자 도구) Network 탭에서 HTTP 요청과 서버로 부터 받는 응답을 확인할 수 있다.

 

1. 요청 메세지 (Requests)

HTTP 요청 메세지의 예시

[구성 요소]

 

・ Method : HTTP 메서드는 보통 클라이언트가 수행하고자 하는 동작을 정의한 GET, POST, OPTIONS, HEAD 를 디칭한다. 클라이언트는 리소스를 가져오거나, 전송할때. 혹은 다른 동작이 필요할때 사용한다.

 

・ Path : 가져오라는 리소스의 경로는 프로토콜 (http://), 도메인 (위 사진에선 developer.mozilla.org) 또는 TCP 포트인 (80) 요소들을 제거한 리소스의 URL이다.

 

・ Version of the Protocol : HTTP 프로토콜 버전 

 

・ Headers : 서버에 대한 추가적인 정보를 전달하는 선택적 헤더

 

・ etc : POST와 같은 몇가지 메서드를 위한, 전송된 리소스를 포함하는 응답의 본문과 유사한 본문

 

 

2. 응답메세지 (Response) 

[구성 요소]

 

・ Version of the Protocol : 프로토콜 버전

 

・ Status Code : 요청 성공 여부와 그 이유를 나타내는 상태 코드

 

・ Status Message : 상태 코드의 짧은 설명 (아무런 영향 없는 그냥 메시지) 

 

・ Headers : 요청 헤더와 비슷한 HTTP 헤더들

 

・ etc : 선택 사항으로 가져온 리소스가 포함되는 본문

HTTP 메세지의 구조

 

 

 

 

 

참고 : https://velog.io/@gparkkii/HTTPMessage

 

'서버 > 서버 이론' 카테고리의 다른 글

게임서버  (2) 2024.10.31
HTTPS  (0) 2024.01.18
OSI 7계층  (0) 2024.01.17
패킷과 패킷통신, TCP/IP  (0) 2024.01.17