HTTP
HYPER TEXT TRANSFER PROTOCOL
HTTP(HyperText Transfer Protocol 은 W3(World Wide Web)에서 정보를 주고 받을 수 있는 프로토콜이다.
모든 웹 어플리케이션의 기초이며, 상호간의 정의된 규칙으로 클라이언트와 서버 사이에 이루어지는 요청/응답으로써
서버는 클라이언트의 요청에 따라 필요한 정보를 사용자에게 응답 해준다.
HTTP 구조
HTTP 통신의 구조는 크게 요청라인(startlien, statusline), header, body 3계층으로 구성되어 있다.
equest HTTP 의 startline 은 요청 url, method, 프로토콜 버전이 담겨져 있고, Response HTTP 의 statsuline은
응답 코드, 응답 코드에 대한 간략한 설명, 프로토콜 버전이 담겨져 있다. 나머지 Header와 body는 동일한 구조로
요청 데이터나 응답 데이터에 관련한 자료(타입, 인코딩, 요청 IP 등등 요청과 응답에 관련된 정보)를 담고 있다.
HTTP 특징
1. Connectionless
- 여러번 호출하더라도 각각의 요청과 응답은 독립적으로 이루어진다.
- 클라이언트의 요청에 응답을 하면 연결을 끊어버리기 때문에 서버부담을 줄일 수 있다.
- HTTP1.0 까진 서버에 여러번 요청하더라도 매번 새로운 연결을 진행하여야 했음으로 반복적인 TCP 3handshake 과정과 RTT, 오버헤드가 일어나 성능을 저하시킨다.
- HTTP1.1 부터 파이프라이닝 기술을 도입해 요청에 대한 응답이 돌아오기 전에도 이어서 요청을 진행해 하나의 커넥션으로
다수의 request와 response를 수행해 Network Latency를 줄인다.
- TCP 3handshake : A 서버는 B 서버로 SYN 패킷을 보내 연결 요청을 하고 SYN/ACK 응답을 기다린다. B 서버는 A 서버로 ACK 와 SYN flag가 설정된 패킷을 전송하고, A가 다시 ACK로 응답하길 기다린다. A 서버가 ACK 보내고 그 이후부터 연결이 이루어져 데이터를 주고 받을 수 있는 상태가 된다. (데이터의 무손실 보장)
- RTT : Round Trip Time의 약자로 인터넷에서 패킷을 보낼때 걸리는 패킷왕복시간이다.
- 오버헤드 : 어떤 처리를 하기위해 들어가는 간접적인 처리 시간-메모리 등을 말한다
2. stateless
- 요청 상태정보를 저장하지 않는다.
- 상태를 저장하지 않기 때문에 요청마다 중복된 Header 값들을 전송하며 불필요한 리소스를 낭비하게 됨
- HTTP 문서의 포함된 리소스를 처리할때 리소스의 크기에 따라 혹은 의존성 파일이 후순위 일 경우 Latency(대기시간)이 길어짐
HTTP 2.0
기존 http의 단점들을 보완하고 기능을 추가한 HTTP의 업그레이드 버전이다.
1. MULTIPLEXED STREAMS
한번의 커넥션으로 동시에 여러개의 메세지를 주고 받을 수 있고, 응답 순서에 상관 없이 STREAM으로 주고 받는다. HTTP1.1의 파이프라이닝 기술을 크게 개선하였다.
2. PRIORITIZATIOND STREAMS
요청 리소스의 우선순위를 설정할 수 있다. 랜더링에서 의존성이 높은 파일을 먼저 받음으로써 리소스가 많아서 브라우저 랜더링이 늦어지는 문제를 해결하였다.
3. SERVER PUSH
HTTP1.1에서 HTML문서를 수신하고, 해석하는 과정에서 필요한 리소스를 다시 요청하는데, SERVER PUSH로 클라이언트가 요청하지 않은 리소스 PUSH해 추가적인 요청을 최소화 하여 성능을 향상 시킨다.
4. HEADER COMPRESSION
HTTP2.0은 HEADER TABLE과 HUFFMAN ENCODING 기법을 사용해 헤더를 압축해 성능을 향상 시켰다. HTTP1.1은 클라이언트가 다수 요청하더라도 중복된 HEADER를 그대로 전송 했다. 하지만 HTTP 2.0 에서는 중복 HEADER를 검출하고, STATIC/DYNAMIC 테이블을 이용해 중복된 HEADER는 INDEX만 전송하고 나머지 값들은 HUFFMAN ENCODING으로 인코딩 후에 전송한다.
'개발 > 개발지식' 카테고리의 다른 글
Maven & Gradle (0) | 2023.07.06 |
---|---|
DNS(Domain Name System) (0) | 2023.04.17 |
Cookie 보안 설정 및 사용 방법 (0) | 2023.03.28 |