HTTP❓❓
HTTP는 HyperText Transfer Protocol 이다. HTTP는 초기에 문서를 전달하기 위해 고안된 프로토콜이었다.
하지만 요즘엔 거의 모든 것을 HTTP프로토콜에 담아서 보내고있다.
( HTML, TEXT, IMAGE, FILE, JSON, XML 등등 )
HTTP/1.1 버전이 가장 많이 사용되고, 가장 중요한 버전이다. 기능의 대부분은 1.1버전에서 만들어졌고,
이후에 나오는 HTTP/2, HTTP/3버전은 거의 성능개선에 초점이 맞춰져있다.
TCP : HTTP/1.1, HTTP/2
(HTTP/1.1 과 HTTP/2 는 TCP프로토콜 위에서 동작을 한다.
UDP : HTTP/3
(HTTP/3는 UDP프로토콜을 기반으로 개발되었다.)
HTTP의 4가지 특징
- 클라이언트 - 서버 구조로 동작한다.
- 무상태 프로토콜, 비연결성
- HTTP 메세지를 통해서 통신한다.
- 단순하고, 확장 가능하다.
클라이언트 - 서버 구조로 동작한다❓
이전에는 클라이언트와 서버가 따로 나누어져 있지 않았다.
하지만 요즘에는 프론트엔트, 백엔드로 나누는것처럼 클라이언트 - 서버 구조로 나누어서 개발한다.
- 클라이언트는 서버에 요청을 보내고, 서버에서 응답을 주기만을 기다린다.
- 서버는 클라이언트가 보낸 요청을 분석해서, 응답을 보낸다.
무상태 프로토콜❓
이전에 HTTP Session의 간단한 동작 방식을 블로그에 썼던게 있지만, 간단하게 또 정리해보자👏
Stateful vs Stateless
Stateful - 상태를 유지한다.
- 서버가 클라이언트의 이전 요청을 모두 알고 있다.
- 서버가 여러대라고 가정(스케일아웃)을 했을때 항상 같은 서버와 통신이 유지되어야 한다.
- 한 대의 서버가 죽어버리면 대응이 어렵다.
Stateless - 상태를 유지하지 않는다.
- 서버가 클라이언트의 이전 요청을 전혀 알지 못한다.
- 서버가 여러대라고 가정했을때, 아무 서버와 통신을 해도 무방하다.
( 클라이언트의 요청에 모든 정보가 다 담겨져 있다.(오버헤드 발생할 수 있음) )
- 한 대의 서버가 죽더라도 다른 서버로 대응이 쉽게 가능하다.
비 연결성(connectionless)❓
소켓 통신은 기본적으로 연결을 유지해서 사용한다.
- 연결을 항상 유지하고 있기 때문에 빠른 데이터 통신이 가능하다.
- 클라이언트가 늘어날 수록 서버의 과부하가 커진다. ( 데이터를 주고 받지 않아도 연결은 계속 유지되어야 하기 때문이다. )
HTTP 통신은 클라이언트와 서버간의 데이터 통신이 끝나면 연결을 끊어버린다.
- 요청에 있을때만 서버와 연결을 맺고, 끊어 버리기 때문에 서버의 과부하가 줄어든다.
- 서버의 자원을 효율적으로 사용 가능하다.
- TCP/IP 연결을 계속해서 새로 맺어야한다 ( 3-way handshake 시간이 추가 된다. )
- 요청을하면 HTML 뿐만아니라 이미지, js파일, css파일 등 엄청 많은 자원을 다운로드 받아야하는데, 이때마다 연결을 새로 맺어야 한다.
- HTTP는 지속 연결(Persistent Connections)로 위의 문제를 해결했다.
( 지속 연결이란? 한 번 연결을 하고 그 연결을 유지한다🤔
HTML, js, 이미지 등 자원들의 요청과 응답을 받고 연결을 종료시킨다.
내부 메커니즘에 따라 다르긴하지만 HTML페이지 하나를 다 받을때까지는 유지한다. )
HTTP 메시지❓
HTTP의 요청메시지와 응답메시지의 기본 구조이다.
시작 라인
- 요청 메시지에는 HTTP 메서드(GET, POST, PUT, DELETE 등)와 요청대상(path), HTTP 버전이 들어가있다.
- 응답 메시지에는 HTTP 버전과 HTTP 상태 코드(200, 404, 501 등등), 코드 설명 글이 들어가져있다.
헤더
- field-name(필드명): field-value(필드 값) 을 적는다.EX) HOST: www.naver.com
- HTTP 전송에 필요한 모든 부가정보가 다 들어가져 있다.
바디
- 실제 전송할 데이터가 들어가져있다.
- HTML, JSON, XML, 이미지, 파일 등등 거읨 모든 데이터를 넣을수 있다.
출처
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
'네트워크' 카테고리의 다른 글
HTTP 웹 기본 지식 - HTTP 상태코드 (0) | 2021.09.04 |
---|---|
HTTP 웹 기본 지식 - HTTP 메서드 (0) | 2021.08.30 |
HTTP 웹 기본 지식 - URI와 웹 브라우저 요청 흐름 (0) | 2021.08.24 |
HTTP 웹 기본 지식 - 인터넷 네트워크 (0) | 2021.08.24 |
HTTP 웹 기본 지식 (0) | 2021.08.21 |