반응형
HTTP 0.9
💡 원-라인 프로토콜, 요청은 단일 라인으로 구성 , 단순 그 자체
- HTTP 초기 버전에는 버전 번호가 없었다.
- HTTP/0.9는 이후에 차후 버전과 구별하기 위해 0.9로 불리게 되었다.
GET /mypage.html
- GET 메서드만 지원함
<HTML>
A very simple HTML page
</HTML>
- 간단한 HTML 객체만 받아 오기 위해 만들어짐
- MIME 타입 , 헤더 , 상태 코드 없음
HTTP 1.0
💡 확장성
- 요청에 버전 정보가 추가 되었음
GET /mypage.html HTTP/1.0
- HTTP 헤더, 추가 메서드 , 상태 , MIME 타입 추가
- HTML 파일 외에 다른 문서들도 전송 가능
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
<IMG SRC="/myimage.gif">
</HTML>
HTTP 1.1
💡 표준 프로토콜 , Persistent Connection (커넥션 재사용 ) , 파이프라이닝 HOL(Head of line) blocking - 특정 응답 지연 , Host Header
- HTTP 1.0 은 연결 완료 → 클라이언트 요청 → 서버 응답 → 연결 종료 (반복)
- 매번 새로운 연결 ⇒ 성능 저하 , 서버 부하 비용 증가
- HTTP 1.1 은 Persistent Connection (커넥션 재사용) : 지정한 timeout 동안 connection 을 닫지 않는 방식
- Connection : Keep-Alive 헤더 추가
- 1.0 에도 Keep-Alive 가 있었는데 표준화되지 않았음
Connection : Keep-Alive
Keep-Alive : max =5 , timeout = 120
// 서버가 약 5개의 추가 트랜잭션이 처리될 동안 커넥션을 유지하거나 , 2분 동안 커넥션 유지
- HTTP 1.0 요청 컨텐츠마다 TCP 세션을 맺어야함
- HTTP 1.1 한 개의 TCP 세션을 통해 여러 개의 콘텐츠 요청이 가능하다.
하지만 , 응답을 받아야만 그 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연(latency) 을 피할 수 없었다.
- 파이프라이닝 : 하나의 커넥션에서 응답을 기다리지 않고 순차적인 여러 요청을 연속적으로 보내 그 순서에 맞춰 응답을 받는 방식으로 지연 시간을 줄이는 방법
- HTTP 클라이언트는 커넥션이 언제 끊어지더라도, 완료되지 않은 요청이 파이프라인에 있으면 언제든 다시 요청을 보낼 준비가 되어 있어야 한다.
- 클라이언트는 POST 와 같은 멱등이 아닌 요청은 파이프라인을 통해 요청하면 안된다.
- 전송 커넥션이 예상치 못하게 끊어져 버렸을 때, 알 수 없는 결과를 초래할 수 있기 때문이다.
- HOL(Head Of Line ) Blocking - 특정 응답 지연
- 처음에 요청한 request 에 문제가 발생해 응답이 늦어 질 경우, 2번째 3번째 요청한 request 의 응답도 같이 늦어짐
- 먼저 처리 할 수 있는 것부터 응답해주면 안됨?? HTTP 프로토콜의 규칙(서버는 반드시 응답을 요청 순서에 맞추어 전달해야 한다)
HTTP 2.0 (2015년 5월 등장)
💡 더 나은 성능을 위한 프로토콜
구글의 SPDY 프로토콜을 기반으로 설계됨
- 헤더 압축
- Server Push
- 바이너리 프로토콜
- Multiplexing
HTTP 3.0 은 TCP 가 아닌 UDP
반응형
'개발 > 프론트엔드' 카테고리의 다른 글
[개발상식] 간단하지만 헷갈리는 개념들 (클래스, 객체, 인스턴스) (0) | 2022.10.27 |
---|---|
[네트워크] 3way handshake & 4way handshake (0) | 2022.10.27 |
[Front-end] URL, URI 비교하여 알아보자 (0) | 2022.10.03 |
[Front-end] CSR / SSR (with Next.js) (0) | 2022.09.30 |
[Firebase] 파이어베이스 호스팅 (1) | 2022.01.27 |