CS/Network

[Network] HTTP Protocol에 대하여

흰무 2023. 6. 9. 19:45

아무렇지 않게 사용하던 HTTP 프로토콜에 대해 더 자세히 알아보고 사용하고 싶은 생각이 생겨, 글을 작성한다.

 

HTTP 프로토콜이란 Hypertext Transfer Protocol의 약자로, 웹에서 클라이언트와 서버 간 통신을 위해 사용되는 통신 규약

HTTP는 웹 브라우저와 웹 서버 간의 데이터 전송 방식을 정의하고 있으며, 인터넷에서 가장 널리 사용되는 프로토콜 중 하나이고 어플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.

 

작동 방식

HTTP 프로토콜은 요청(Request)과 응답(Response)으로 구성된다.

클라이언트는 HTTP 요청 메시지를 서버로 전송하고, 서버는 해당 요청에 대한 응답 메시지를 클라이언트에게 반환한다.

이러한 요청과 응답은 특정 규칙과 형식을 따르며, 다양한 헤더와 본문 데이터를 포함할 수 있다.

 

특징

  • Connectionless/Stateless

HTTP 프로토콜은 무상태(Stateless) 프로토콜이다. 이는 각각의 요청과 응답이 독립적으로 처리된다는 것을 의미한다.

서버는 클라이언트의 상태를 유지하지 않으며, 각각의 요청은 서버가 독립적으로 처리하고 응답한다.

이는 확장성과 성능 면에서 장점을 가지지만, 상태 정보를 유지해야 하는 경우에는 추가적인 기술적인 처리가 필요하다. 이 때 쿠키를 이용해서 해결하는 방법이 있다.

쿠키? - 클라이언트와 서버의 상태 정보를 가지고 있는 정보 조각

 

  • URI

클라이언트는 URI를 이용해서 자원의 위치를 찾는다.

URI : 자원의 위치를 알려주기 위한 프로토콜

Uniform Resource Identifier의 줄임말로, 웹 상에서 접근하고자 하는 자원의 위치를 나타내기 위해 사용한다.

자원은 HTML, 이미지, 동영상, 오디오, 텍스트 등 모든 것이 될 수 있다.

Ex) https://www.naver.com/aa 의 경우,

https : 자원에 접근하기 위해 사용하는 프로토콜

www.naver.com : 자원의 위치 => 도메인 주소는 IP 주소로 변환된다.

aa : 요청하는 자원의 이름

 

이렇게 "프로토콜","위치","자원의 이름"으로 자원에 접근한다.

 

메소드

HTTP 프로토콜은 다양한 메서드(Method)를 제공하여 서버에 원하는 동작을 요청할 수 있다.

가장 일반적인 메서드는 GET, POST, PUT, DELETE가 있다.

  • GET : 서버로부터 리소스를 가져오기 위해 사용
  • POST : 서버에 데이터를 전송하기 위해 사용
  • PUT : 서버에 리소스를 생성하거나 업데이트
  • DELETE : 서버의 리소스를 삭제하기 위해 사용
  • HEAD: 헤더 정보만 요청, 해당 자원이 존재하는지, 서버에 문제가 없는지 확인
  • OPTIONS : 웹 서버가 지원하는 메소드의 종류를 확인
  • TRACE : 클라이언트의 요청을 그대로 반환

구조

HTTP는 클라이언트와 서버 간의 통신을 위해 요청과 응답의 형태로 구성된다.

 

HTTP Request(요청): HTTP Request는 클라이언트가 서버에게 특정 동작을 요청하기 위해 보내는 메시지입니다.

- 구성요소

  1. HTTP 메서드(Method): 요청의 목적을 나타내는 메서드
  2. URL(Uniform Resource Locator): 요청할 자원의 위치를 나타내는 URL
  3. 헤더(Headers): 추가적인 요청 정보를 담고 있는 헤더들로 구성, 클라이언트의 브라우저 정보, 인증 정보, 캐시 관련 정보 등이 포함
  4. 본문(Body): POST 또는 PUT 메서드와 함께 전송되는 데이터가 포함, HTML 폼 데이터나 JSON 형식의 데이터 등

HTTP Response(응답): HTTP Response는 서버가 클라이언트의 요청에 대해 제공하는 응답 메시지입니다.

- 구성요소

  1. 상태 코드(Status Code): 요청에 대한 처리 결과를 나타내는 상태 코드가 포함
  2. 헤더(Headers): 추가적인 응답 정보를 담고 있는 헤더들로 구성, 응답의 길이, 데이터 타입, 캐시 관련 정보 등이 포함될 수 있습니다.
  3. 본문(Body): 요청에 대한 처리 결과로 반환되는 데이터가 포함되는 부분

HTTP 응답 코드: HTTP 응답 코드는 요청에 대한 처리 결과를 나타내는 세 자리 숫자로 구성됩니다. 주요한 응답 코드의 종류는 다음과 같습니다:

  • 1xx: 정보 전달을 위한 코드로, 주로 요청 처리 상태를 알리는데 사용
  • 2xx: 성공적인 요청에 대한 코드로, 주로 요청이 정상적으로 처리되었음을 알리는데 사용, 200(OK), 201(CREATED)
  • 3xx: 리다이렉션을 위한 코드로, 주로 클라이언트에게 다른 위치로 리다이렉션하거나 캐시를 사용하도록 알리는데 사용
  • 4xx: 클라이언트 오류를 나타내는 코드로, 주로 잘못된 요청이나 권한 부족 등에 대한 응답으로 사용, 404(NOT FOUNDED)
  • 5xx: 서버 오류를 나타내는 코드로, 주로 서버에서 처리 중에 에러가 발생했거나 서버 자체의 문제로 인해 요청을 처리할 수 없음을 나타내는데 사용, 500(Server Error)

+Keep Alive란?

Http 1.1부터 keep-alive 기능을 지원한다고 한다.

기존의 HTTP는 하나의 연결에 하나의 요청하도록 설계되어 있다.

많은 양의 데이터를 송수신 할 때 생기는 비효율적인 면을 해결하기 위해 생긴 기능이다.

ex) keep-alive:timeout=3,max=100

 => 하나의 연결을 3초 동안 유지하고, 최대 100개의 요청을 처리한다.