선릉역 1번 출구
HTTP version 별 특징(HTTP/0.9 ~ HTTP/2.0) 본문
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 |