HTTP

uni.gy·2023년 5월 15일
0

CS

목록 보기
10/18

HTTP

HyperText Transfer Protocol 인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다.
클라이언트가 요청을 하면 서버에서는 해당 요청에 맞는 결과를 응답하는 형태로 동작한다.
응답 형태는 HTML, JSON, XML 등이 있다.
HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.

상태코드

  • 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
  • 2XX (성공) : 클라이언트가 요청한 동작을 성공적으로 처리했음을 가리킨다.
  • 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
  • 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
  • 5XX (서버 오류) : 서버가 유효한 요청을 수행하지 못했음을 나타낸다.

HTTP version

HTTP 0.9

  • http 초기 버전 method는 GET만 존재
  • http 헤더도 없고, HTML파일만 전송 가능하다.

HTTP 1.0

  • HTTP 헤더 개념이 도입되었다.
  • 버전 정보와 요청 method가 함께 전송되기 시작.
  • 상태 코드도 응답의 시작 부분에 추가되었다.
  • Content-Type 도입으로 HTML 이외의 문서 전송 기능이 가능해졌다.

한계
커넥션 하나당 요청 하나와 응답 하나만 처리 가능했다.

HTTP 1.1

  • Persistent Connection : 지정한 timeout 동안 커넥션을 닫지 않는 방법을 통해 커넥션의 사용성이 높아졌다.
  • Pipelining : 앞 요청의 응답을 기다리지 않고 순차적인 여러 요청을 연속적으로 보내고 그 순서에 맞춰 응답을 받는 방식

한계

  • Head of Line Blocking(HOL) : 앞 요청의 응답이 너무 오래 걸리면 뒤 요청은 Blocking 되어버림
  • Header 구조의 중복 : 연속된 요청의 헤더의 많은 중복이 발생

HTTP 2.0

  • Binary Framing 계층 추가
    • 보내는 메시지를 프레임(frame)이라는 단위로 분할하며 추가적으로 바이너리로 인코딩을 한다. 바이너리 형식 사용으로 파싱속도 및 전송 속도가 빠르고 오류 발생 가능성이 낮아졌다.
  • Multiplexed Streams : 한 커넥션으로 동시에 여러 개 메시지를 주고 받을 수 있으며, 응답은 요청의 순서에 상관없이 stream으로 주고 받아 HOL이 자연스럽게 해결된다.
  • Stream Prioritization : 리소스간 우선순위를 설정해 클라이언트가 먼저 필요한 리소스부터 보내준다.
  • Server Push : 서버는 클라이언트의 요청에 대해 요청하지 않았지만 추가적으로 필요한 리소스를 보내줄 수 있다.
  • Header Compression : Header table과 Huffman Encoding 기법을 이용해 압축했다. 이전 header의 내용과 중복되는 필드를 재전송하지 않아 오버헤드를 감소.

한계

  • 서로 다른 stream이 전송되고 있을 때, 하나의 stream에서 유실이 발생되거나 문제가 생기면 다른 stream도 문제가 해결될 때까지 지연되는 현상이 발생.


* 이미지 출처 : https://hirlawldo.tistory.com/106

HTTP 3.0

  • QUIC : 구글에서 개발한 UDP 기반의 전송 프로토콜(Quick UDP Internet Connections)
    • TCP의 구조적 문제로 성능 향상이 어렵다고 판단해 UDP 기반을 선택
    • 3way handshake 과정을 최적화 하는 것에 초점을 두고 개발됨

HTTP method 멱등성

동일한 요청을 한번 보내는 것과, 여러번 보내는 것이 서로 동일한 효과를 지니고, 서버의 상태도 동일.

  • 안전한 메소드 [GET] : 서버의 상태를 변경시키지 않는 HTTP 메소드
  • 멱등한 메소드 [PUT, DELETE]
  • 멱등하지 않은 메소드 [POST]
profile
한결같이

0개의 댓글