HTTP

HTTP란

HyperText Transfer Protocol 의 약자로 웹에서 데이터를 주고 받기 위한 프로토콜 중 하나.

HTTP는 클라이언트와 서버 간의 통신을 담당하며, 주로 웹 브라우저와 웹 서버 간의 데이터 전송에 사용된다.
TCP/IP 5계층에서 Application Layer 에 속하는 프로토콜이다.

Attachments/Picture/Pasted image 20231214134143.png|500

HTTP 동작

그렇다면 클라이언트와 서버간의 HTTP 통신은 어떤 식으로 동작하는가
Attachments/Picture/Pasted image 20231214134736.png|500
클라이언트와 서버들은 메시지 교환에 의해서 통신한다.
클라이언트에 의해 전송되는 메시지를 request(요청) 이라고 부르며, 그에 대한 서버에서의 응답으로 전송되는 메시지를 response(응답) 라고 한다.

HTTP의 특징

Stateless(무상태) 프로토콜

Attachments/Picture/923486bca18aac8441301e8d96df5193_MD5.png|500
HTTP는 상태를 저장하지 않는 stateless 프로토콜이다.
각 요청은 독립적이고 이전 요청과 관련이 없다.

stateless로 인한 장점은 크게 2가지가 있다.

하지만, 클라이언트 요청마다 더 많은 정보를 실어야하기 때문에 데이터 전송량이 좀 더 크다.

로그인하면 다른 페이지에 가도 기억하는데 어떻게 그럴 수 있을까?

stateful한 시스템인 session을 사용하거나, token을 사용하는 방식으로 클라이언트의 정보를 확인한다.

Connectionless(비연결성)

HTTP는 클라이언트와 서버의 연결을 지속적으로 연결하지 않는다.
연결을 유지하지 않고 요청과 응답으로 작동한다.
Attachments/Picture/c528499b368259f9583eff8e93d7ec1a_MD5.png
연결을 계속 해서 유지하지 않기 때문에, 서버의 자원을 효율적으로 사용할 수 있다는 장점이 있다.

물론 한계도 있다. 한계와 개선방법을 알아보자.

비연결성의 한계 - 단기 커넥션

웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 js,css, image 등 많은 Resource가 연쇄적으로 요청되는 경우가 많다.
하지만 HTTP의 비연결성으로 요청 시마다 새로 연결을 해야하면 상당한 비효율성이 생긴다.
HTTP는 TCP/IP 연결을 사용하는데, 매번 3way handshake를 한다는 말이 된다.
Attachments/Picture/67d71d53703b9185aa1402db956f840e_MD5.png|500

비연결성 극복 - HTTP 지속 연결

지속연결을 통해서 위 문제점을 해결한다.
소켓 연결을 일정 시간동안 더 유지시켜서, 필요한 resource들을 모두 다운받을 때 까지 연결이 종료되지 않게한다.
Attachments/Picture/399a885d6c0f351effb993954323b640_MD5.png|500

HTTP 메시지

HTTP 메시지는 아래와 같은 구조를 가진다.
Attachments/Picture/Pasted image 20231215170115.png|500
크게 start line, header, empty line, message body로 구성된다.
공백 라인은 HTTP 메시지 값을 구분하기 위한 라인으로, 단순히 보기 좋게하기 위한 것은 아니므로 반드시 있어야한다.
HTTP 요청에 따라서 body는 포함될 수도 있고 안될 수도 있다.

요청 메시지

Attachments/Picture/Pasted image 20231215165556.png|500

응답 메시지

Attachments/Picture/Pasted image 20231215165914.png|500

HTTP Method

클라이언트와 서버 사이에 이루어지는 요청과 응답 데이터를 전송하는 방식
주어진 리소스에 수행하길 원하는 행동을 정의한다.

method 종류

9종류가 있지만, 그 중 주로 쓰이는 메서드는 5개 정도이다.

특성

안정성(safe)

멱등성(idempotent)

캐시 가능(cacheable)

HTTP 상태 코드

서버가 클라이언트에게 전송하는 3자리 숫자로 이루어진 코드.
HTTP 요청의 결과를 나타낸다.

다음은 표준 상태코드와 그 중 많이 사용되는 상태코드 들이다.

1xx(informational)

작업을 진행중이라는 의미. HTTP/1.0 이후 잘 안쓰이다가 최근들어 101 WebSocket등에서 사용

2xx(successfull)

작업을 성공적으로 받았고, 이해했음여, 받아들여졌다는 의미

3xx(redirection)

요청을 완료하기 위해서 리다이렉션이 이루어져야 한다는 의미

4xx(client error)

클라이언트의 요청이 올바르지 않다는 의미. 여기서부터는 브라우저에 직접 표출된다.

5xx(server error)

서버가 응답할 수 없다는 의미이며, 요청이 올바른지의 여부는 알 수 없다.

Attachments/Picture/c525fd33a4b9ffbaed1cc78dca60cbeb_MD5.png

Reference