HTTP란?

웹을 배우지 않아도 인터넷을 한번이라도 사용했다면 주소창에서 볼 수 있는 HTTP에 대해서 간단히 정리해보려고 한다.

 

HTTP란???

우선 HTTP의 정의부터 알아보자.

HTTP는 Hyper Text Trasnsfer Protocol의 약자로 웹에서 리소스(데이터)를 주고 받을 수 있는 프로토콜이다.

프로토콜은 "약속"을 의미한다. 조금 더 와닿게 설명하면 HTTP는 웹에서 서버와 클라이언트간에 리소스를 주고 받기 위한 약속을 말한다.

 

그러면 웹에서 리소스를 주고 받기 위해 약속을 정한 이유는 무엇일까?

 

약속을 정하지 않고 서로 다른 하드웨어와 운영체제, 무엇 하나 같은게 없는 컴퓨터끼리 웹에서 통신을 한다고 한번 상상해보자.

그러면 서로 통신을 하기 위해 자신만의 방법으로 데이터를 요청하고 보내려고 할것이다.

심지어 통신을 어떻게 시작할 것인지, 어떤 언어로 통신할것인지 등 무엇하나 정해진것이 없기 때문에 많은 문제가 발생하게 된다.

 

그래서 전세계의 모든 기기가 동일하지 않기 떄문에 서로 통신을 하기 위해서는 통신을 하기 위한 방법, 즉 통신 규약이 필요했고 이를 프로토콜이라고 부른다. 

 

웹은 HTTP라는 프로토콜(약속)을 사용한 통신으로 이루어져 있다.

 

 

클라이언트와 서버

클라이언트와 서버를 단순히 설명하면 텍스트나 이미지 같은 리소스를 필요로 하는 쪽이 클라이언트 이고, 이러한 리소스를 제공하는 쪽이 서버이다.

 

클라이언트와 서버는 Request - Response 구조로 이루어져 있다.

클라이언트가 서버에 Request를 요청함으로써 통신이 시작이 된다. 이 말은 클라이언트가 Request하지 않으면 통신이 시작될 일은 없다는 이야기이다.

단순히 생각해보자. 클라이언트가 요청을 보내지도 않았는데 서버가 응답을 한다는것이 말이 안된다.

 

 

HTTP 메시지

HTTP 메시지의 타입에는 요청(Requset)과 응답(Response) 두 가지가 있다. 

 

HTTP 메시지 구조

출처 : https://www.hyojae.info/9141e6c1-0f97-4172-8853-989db5255dec

HTTP의 요청과 응답의 기본적인 메시지 구조는 동일하다.

 

HTTP 메시지의 구조를 크게 구분하면 메시지 헤더와 메시지 바디로 구성되어 있다. 그리고 개행 문자로 메시지 헤더와 바디를 구분할 수 있다.

 

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages#%EB%B3%B8%EB%AC%B8

Request와 Response 메시지의 예시를 보면 위에서 설명했던 구조처럼 나뉜다.

 

메시지 헤더 부분 -> start-line과 HTTP headers

개행 문자 부분 -> empty line

메시지 바디 부분 -> body

 

start-line

먼저 start-line에는 HTTP 메소드 + URI + HTTP 버전(프로토콜 버전)으로 구성이 되는데 위의 Requests 메시지 예시에서는 POST / HTTP/1.1 으로 이루어져 있다. 

  • - HTTP 메소드 : POST
  • URI : "/"
  • HTTP 버전 : HTTP/1.1

 

HTTP heaers

HTTP 헤더 필드는 중요한 정보를 전달하는데 아래와 같이 4종류로 분류가 된다.

 

1. General 헤더 (공통 헤더)

General 헤더는 리퀘스트, 리스폰스 메시지 두 군데 모두에서 사용되는 헤더이다. (Date, Connection, Cache-Control ... )

 

2. Request 헤더 (요청 헤더)

Request 헤더는 클라이언트가 서버에게 요청 메시지를 보낼때 사용되는 헤더로, 요청의 부가적인 정보와 클라이언트의 정보 등을 부가하는 헤더이다. (Accept, Authorization, User-Agent ...)

 

3. Response 헤더 (응답 헤더)

Response 헤더는 서버가 클라이언트에게 응답 메시지를 보낼때 사용되는 헤더로, 응답의 정보와 서버의 정보 등을 부가하는 헤더이다. (Age, Location, Server ...) 

 

4. Entity 헤더 (엔티티 헤더)

요청 메시지와 응답 메시지에 포함된 엔티티에 사용되는 헤더로, 콘텐츠 갱신 시간 등의 엔티티에 관한 정보를 부가하는 헤더이다. (Allow, Content-Type, Content-Language ...)

 

 

Body

바디 부분에는 실제로 전송할 데이터(HTML, 이미지 등등)가 들어간다.

'Network' 카테고리의 다른 글

TCP와 UDP의 특징 (3-way-handshaking, 4-way-handshaking)  (0) 2023.01.10
HTTPS란 무엇인가?  (0) 2023.01.06