선릉역 1번 출구

HTTP version 별 특징(HTTP/0.9 ~ HTTP/2.0) 본문

Computer/Network

HTTP version 별 특징(HTTP/0.9 ~ HTTP/2.0)

choideu 2023. 4. 28. 10:17

1. HTTP/0.9

- 초기 단계의 http 프로토콜로 버전 번호도 없고 매우 간단한 구조를 가짐

- 요청 메소드도 GET 뿐임

Request: 단일 라인으로 구성됨

GET /choideu.html

Response: 파일 내용 자체로 응답 헤더 없이 html 파일만 전송 가능

 

2. HTTP/1.0

- 브라우저와 서버에서 확장성있게 진화됨

- 버전 정보와 상태코드, 헤더 개념 도입

=> 상태코드를 사용해서 브라우저 요청의 성공/실패를 파악할 수 있게됨

- html외 다른 메타데이터 전송을 허용(content-type)

- One request = One response

GET /choideu.html HTTP/1.0
User-Agent: ~

200 OK
Date:
Server:
Content-Type: text/html
<HTML>
	~~
</HTML>

 

3. HTTP/1.1

- HTTP/1.0 버전에서 모호했던 내용을 개선하고 추가적인 기능들을 도입함

- connection이 재사용될 수 있게 함(이전에는 한 개의 request 당 하나의 response만이 가능)

=> Persistent Connection으로 지정한 시간동안 커넥션을 닫지 않는 방법을 통해 커넥션의 사용성이 높아짐, keep-alive

- Pipelining 추가

  • 앞 요청의 응답을 기다리지 않고 순차적인 여러 요청을 연속적으로 보내고 그 순서에 맞춰 응답을 받는 방식으로 기존의 순차적으로 요청-응답이 처리되는 것을 개선함
  • 하지만 이 방식은 앞 요청의 응답이 너무 오래걸리면 뒤 요청은 blocking 되는 문제가 발생함(Head Of Line Blocking)
    • 하나의 request-response 1pair를 stream이라고 하는데, 이는 stateless함 -> 하나의 stream은 하나의 요청과 그에 대한 응답을 처리하고 그 다음 요청과 응답을 처리하기 위해 새로운 stream을 생성해야한다는 것임

- Header 구조의 중복이라는 단점(연속된 요청의 경우 헤더의 많은 중복이 발생함)

ex) 동일한 도메인의 여러 페이지를 요청할 때, 매 요청마다 동일한 헤더가 반복적으로 전송됨, Accept-Encoding/Accept-Language/User-Agent와 같은 정보가 예시임

 

먼저 알고가기) Binary file vs Text file

바이너리 파일

  • 컴퓨터가 이해할 수 있는 0과 1로 이루어진 이진 형식의 파일로 실행 파일, 이미지, 음악 등 다양한 형태의 파일이 이에 해당함
  • 텍스트 파일과 달리 파일 내용을 직접 열어보면 읽을 수 있는 문자가 아닌 일련의 이진 코드로 이루어져 있음

텍스트 파일

  • 인간이 이해할 수 있는 문자로 이루어진 파일로 문서, 코드, 로그 파일 등의 형태의 파일
  • ASCII, Unicode 등의 문자 인코딩 방식을 사용해 인코딩됨
  • 파일 내용을 열면 텍스트 에디터에서 열었을 때와 같은 내용을 볼 수 있음

Q. 컴퓨터는 모든 데이터를 0과 1로 처리하는거 아니었어?

A. 텍스트 파일도 내부적으로는 0과 1로 이루어진 이진 데이터이지만, 텍스트 파일을 읽을 때 이진 데이터를 특정 문자 인코딩 방식을 사용해 사용자가 이해할 수 있는 문자열 데이터로 변환해줌

 

***메모장과 같은 텍스트 에디터로 바이너리 파일을 열면, 바이너리 값 대신 이상한 문자나 기호들이 보이는 것을 볼 수 있습니다. 이는 텍스트 에디터가 파일의 이진 데이터를 인코딩하여 문자로 해석하기 때문입니다. 따라서 이진 데이터를 읽으려면 이진 데이터를 해석할 수 있는 프로그램이나 도구가 필요합니다.

 

바이너리 파일 vs 텍스트 파일에 관한 글

https://m.blog.naver.com/tipsware/221353023593

 

텍스트 파일과 바이너리 파일에 대하여!

:   C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. 바이너리 파일이...

blog.naver.com

 

***connection과 stream

  • connection: 서버와 클라이언트 사이의 TCP 연결
  • stream: 하나의 connection 내에서 요청과 응답의 단위

=> 하나의 connection 내에서 클라이언트가 서버에 보내는 여러개의 요청과 서버가 클라이언트에 보내는 여러개의 응답이 각각 stream으로 나눠져 전송됨

 

4. HTTP/2.0

- HTTP/2.0에서는 pipelining과 함께 동시에 처리할 수 있는 stream의 개수가 여러 개로 늘어남(하나의 connection 안에서 여러 개의 stream이 동시에 열릴 수 있으며, 각각의 stream은 서로 독립적으로 데이터를 주고 받음)

=> Head Of Line Blocking 문제 해결

 

- 양방향 stream: 각 stream 내에서는 요청과 응답이 양방향으로 이루어질 수 있음

  • HTTP/1.1에서는 여러 요청에 대해 여러 개의 stream이 생성되지만, 한번에 처리 가능한 stream은 1개임, 또한 request에 대해 response를 하고 나면 해당 stream이 닫히므로 양방향일 수 없음 -> 단방향

- 바이너리 프레이밍

  • HTTP/2.0의 핵심으로 HTTP 메시지가 캡슐화되어 클라이언트와 서버 사이에 전송되는 방식을 규정함

***key point: HTTP/2.0에서 보내는 데이터는 이진 형식으로 인코딩되어 전송하지만, 수신 측은 해당 데이터를 해독하고 해석하기 위한 알고리즘을 사용해 새로운 형식으로 변환함

- server push: 클라이너트가 요청하지 않는 리소스도 서버에서 PUSH 가능

 

Q. TCP 3way-handshake 과정의 수립 이후의 Connection 생성, 그리고 HTTP 버전 별 반응

A.

    1) HTTP/1.0: 요청 때마다 TCP 3 way-handshake 과정 수립

    2) HTTP/1.1: 한번의 TCP 3 way-handshake 과정 수립 후 Keep-alive 시간동안 Connection 유지

    3) HTTP/2.0: 한번의 TCP 3 way-handshake 과정 수립 후 Connection 유지 및 동시 처리 가능한 stream의 개수는 여러 개

 

 

 

참고 사이트

https://velog.io/@pilyeooong/HTTP2%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

HTTP2를 알아보자

구글의 비표준 개방형 네트워크 프로토콜인 SPDY에 기반한다.HTTP2가 되었다고 기존 HTTP의 의미 체계나 표준이 바뀌는 것이 아닌, 확장의 개념으로 받아들여야 한다. 모든 핵심 개념은 그대로 유지

velog.io

https://haesoo9410.tistory.com/338

 

<네트워크> http 버전 별 특징 (0.9 / 1.0 / 1.1 / 2.0)

1. http/0.9 - 초기 단계의 http 프로토콜은 버전 번호도 없었으며 매우 간단했다. 이후 버전과 구별하기 위해 0.9라고 불리게 되었다. - http/0.9 요청은 단일 라인으로 구성되며 리소스에 대한 경로로

haesoo9410.tistory.com

 

'Computer > Network' 카테고리의 다른 글

Network Security Architecture  (0) 2023.05.06
유무선 동시 연결  (0) 2023.05.04
망분리  (0) 2023.04.27
DOM과 Virtual DOM  (0) 2023.04.11
HTTP에서 socket이 사용되는가?  (0) 2023.04.11
Comments