본문 바로가기

HTTP 본문

Dev

HTTP

겨울바람_ 2024. 2. 24. 19:04

Hyper Text Transfer Protocol

브라우저와 서버가 통신할 수 있도록 만들어주는 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 데이터를 주고 받는데 사용되는 통신

 

초기에는 HTML 문서를 전송하기 위한 목적으로 만들어졌으나 지금에서는 Json 및 Image 파일 등 여러 형태의 데이터를 주고받을 수 있게 됐다.

특징 

HTTP 는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작한다. 브라우저에서 URL을 입력하고 조회하면 DNS 서버가 URL의 IP를 찾아 해당 IP의 서버와 TCP 연결을 맺고, 이후 HTTP 요청/응답이 발생한다.

TCP/IP 란?
일반적으로 전송 계층 프로토콜로 TCP 를 사용하고, 네트워크 계층 프로토콜로 IP 를 사용하는데 이 두 계층을 통틀어 TCP/IP 라고 칭한다.
TCP/IP 에서는 IP 주소를 사용해 통신할 컴퓨터를 결정하고, 포트 번호를 사용해서 해당 컴퓨터의 어떤 프로그램과 통신할지 결정한다. 이때 HTTP에서는 기본적으로 80포트를 사용

 

비연결성 / 무상태성 프로토콜이다.

비연결성 (Connectionless) / 무상태성 (Stateless) 란? 
비연결성은 클라이언트와 서버가 한 번 연결을 맺은 후 , 클라이언트 요청에 대해 서버가 응답을 마치면 클라이언트의 상태를 저장하않고 맺었던 연결을 끊어 버리는 성질을 의미한다.
서버는 접속을 유지할 필요가 없고 상태를 저장할 필요 또한 없기 때문에 연결성을 가지는 프로토콜에 비해 최소한의 자원만을 사용하게 된다.  
또한 이전 데이터 요청과 다음 데이터 요청이 서로 무관하다.

HTTP Message

HTTP Request

GET /index.html HTTP/1.1 -- Request Start Line

/* HTTP Header Start */
Host: example.com 
User-Agent: Mozilla/5.0 
Accept-Language: ko-KR
/* HTTP Header End */

/* Body Start */
/* Body End */

Request  Start Line에는 HTTP 메소드, 요청 타겟, URL, Protocol, Port, Domain, HTTP 버전 등의 정보가 포함된다

 

HTTP Header는 3종류로 나눌 수 있는데 요청과 응답에 모두 적용되지만 데이터와는 관련이 없는 General Header

요청하는 클라이언트에 대한 자세한 정보를 포함하는 Request Header. 마지막으로 컨텐츠의 길이나 MIME 타입과 같이 Body 에 대한 자세한 정보를 포함하는 헤더인 Entity Header 가 HTTP Header 에 속한다.

 

Body 에는 Single-Resource Bodies 와 Multi-Resource Bodies 두 종류의 데이터가 올 수 있다. 

 

HTTP Response

HTTP/1.1 200 OK -- Response Status Line

/* HTTP Header Start */
Date: Sat, 09 Oct 2023 14:28:02 GMT
Server: Apache
Content-Type: text/html
/* HTTP Header End */

/* Body Start */
<html>
...
</html>
/* Body End */

Response Status Line에는 Protocol 버전, 상태 코드, 상태 텍스트 등의 정보가 포함된다.

 

HTTP Header는 3종류로 나눌 수 있는데 요청과 응답에 모두 적용되지만 데이터와는 관련이 없는 General Header

요청하는 클라이언트에 대한 자세한 정보를 포함하는 Request Header. 마지막으로 컨텐츠의 길이나 MIME 타입과 같이 Body 에 대한 자세한 정보를 포함하는 헤더인 Entity Header 가 HTTP Header 에 속한다.

 

Body 에는 Single-Resource Bodies 와 Multi-Resource Bodies 두 종류의 데이터가 올 수 있다. 

 

'Dev' 카테고리의 다른 글

MySQL의 인덱스  (1) 2024.03.16
3/4-way Handshake 란?  (0) 2024.02.25
Transaction  (0) 2024.02.20
Spring Security Session 과 RestAPI  (0) 2023.08.17
In-Memory NoSQL DBMS Redis  (0) 2023.06.18
Comments