HTTP 란 무엇일까?

2022. 11. 14. 10:06Web

728x90

HTTP는 HyperText Transfer Protocol이다.

HTTP가 인터넷에서 정보를 주고받기 위한 통신 규약이라는 사실은 다들 알고 있을 겁니다.

 

그렇다면, HTTP가 아래의 특징을 가진다는 사실도 또한 다들 알고 계실 겁니다

  • 클라이언트 서버 구조
  • 무상태 프로토콜(스테이스리스)
  • 비연결성
  • HTTP 메세지

그럼 각각의 특징들에 대해서 공부해 보겠습니다.

 

클라이언트 서버 구조

저같은 경우에는 '누군가가 클라이언트 서버 구조가 뭐야?'라고 물어보면, 단순히 클라이언트가 request를 하면 서버가 response를 한다.'  정도로 답할 수 있을 것 같습니다.

하지만, 이번에 HTTP에대해 더 공부해본 결과 이 클라이언트 서버 구조는 백엔드는 비즈니스 로직 처리, 데이터에 집중할 수 있게끔 해주었고, 프론트는 UI와 사용성에 집중할 수 있게끔 만들어 주었습니다.

 

무상태 프로토콜

이번에 공부하면서 , '단순히 서버가 클라이언트의 상태를 보존하지  못 한다'에서 멈추지 않고, 

상태를 유지하지 못한다라는 특성을 이용해서, 어떻게하면 서버측에서  많은 트래픽을 다룰 수 있을 까에대해서 

고민해보았습니다.

 

그러니깐 상태를 유지 못하니깐, 요청과 응답을 같은 서버를 사용할 필요가 없다. -> 서버를 무한히 증설 가능하다

이를 스케일 아웃이라고 한다.

 

비연결성

HTTP는 기본이 연결을 유지하지 않는 모델이다. 따라서, 서버 자원을 매우 효율적으로 사용할 수 있다는 장점이 있지만, 

한계는 연결 할 때마다 TCP/IP 연결을 새로 맺어야하는 점이다.

이는 HTTP 지속연결로 해결하였다고 한다.

 

이 부분에서는 3학년때 네트워크에대해서 배울 때 공부해서 다시 포스팅 하도록 하겠다!

 

HTTP 메세지

 

HTTP 메세지의 전체적인 구조는 아래와 같습니다.

 

 

 HTTP 메세지는 요청 메시지이냐 응답 메세지이냐에 따라서 담기는 내용이 다릅니다.

먼저, HTTP Request Message부터 알아보겠습니다.

 

HTTP  Request Message - 시작라인, 헤더, 바디

 

  • 시작 라인 : HTTP 메소드, Request target (URL), HTTP version

HTTP version을 명시하는 이유는 version에 따라 Request 메세지 구조나 데이터가 다를 수 있기 때문입니다.

 

  • 헤더 : HTTP 전송에 필요한 부가 정보들을 다룬다.

메세지 바디의 내용, 크기, 인증, 캐시 관리 정보, 쿠키 값 등등

 

  • Blank Line(CRLF)
  • Body

요청에 관련된 JSOM.HTML과 같은 구체적인 내용을 포함합니다.

 

다음으로, HTTP 응답 메세지에대해서 살펴보도록 하겠습니다.

 

 

HTTP  Response Message - 상태라인, 

 

  • 상태라인 :HTTP version, Status Code, Status Text

Status Code는 Response 상태를 나타내는 코드이다.

예를 들어, 2XX, 3XX,4XX와 같은 숫자 코드 (이에 대해서는 아래에 자세히 다루겠습니다)

 

  • 헤더 : 

Locatoin : 301, 302 상태코드일 때만 볼 수 있는 헤더로, 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치를 지정한다

Server

WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시, 서버가 제공하는 인증방식

Proxy - Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값

 

  • Blank Line(CRLF)
  • Body

보통 JSON형식으로 된 데이터

 

공통 Header

 

Date : 현재시간

Cache-Control : 캐시 제어

     + no-store : 캐시를 저장하지 않겠다

     + no-cache : 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인하겠다

     + must-revalidate : 만료된 캐시만 서버에 확인하겠다.

     + public : 공유 캐시에 저장해도 된다.

     + private : '브라우저' 같은 특정 사용자 환경에만 저장하겠다.

     + max-age : 캐시의 유효시간을 명시하겠다.

Transfer-Encoding : Body 내용 자체 압축 방식을 지정

Content-Encoding : Body의 리소스 압축 방식 (Transfer-Encoding은 Body 자체이므로 다름)

Content-type : Body의 미디어 타입 ex) application/json, text/html

Content-Length : Body의 길이

Content-language : Body를 이해하는데 가장 적절한 언어 ex) ko

Connection : 클라이언트와 서버의 연결 방식 설정. HTTP/1.1은 keep-alive로 연결 유지하는게 디폴트 입니다.

 


 

HTTP 메서드

 

HTTP 메서드는 GET, POST, PUT, PATCH, DELETE 가 있습니다.

각각의 메서드들은 어떤 경우에 사용합니다.

 

메서드 의미 Indempotent
POST CREATE NO
GET SELECT YES
PUT UPDATE YES
DELETE DELETE YES

 

GET 

  • 리소스 조회
  • 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
  • 메세지 바디를 이용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

POST 

  • 요청 데이터 처리
  • 메시지 바디를 통해 서버로 요청 데이터 전달
  • 전달된 데이터를 처리하는 모든 기능을 수행한다.
  • 애매하면, POST 사용할 것

PUT

  • 리소스를 완전히 대체!
  • 기존 리소스가 존재하면 덮어 씌우고, 없다면, 새로 생성한다. 
  • PUT같은 경우, POST와 다르게 클라이언트가 URL을 인식해야 한다.

 

PATCH

  • 리소스 부분 변경
  • 리소스

DELETE 

  • 리소스 제거

 

728x90

'Web' 카테고리의 다른 글

배치(Batch)란?  (0) 2023.04.06
동기 비동기 개념  (0) 2023.04.06
JWT에 대하여  (0) 2023.03.31
Rest와 Rest API에 관하여  (0) 2022.10.30
쿠키와 세션  (0) 2022.05.09