본문 바로가기
네트워크

HTTP 통신

by heereal 2023. 7. 21.

HTTP 메시지 공통 구조

  1. 메시지 헤더
    • 서버와 클라이언트가 꼭 처리해야 하는 내용과 속성
  2. 개행 문자
  3. 메시지 바디
    • 꼭 전송되는 데이터 그 자체

 

메시지 헤더 구성 요소

  1. 리퀘스트 라인 혹은 상태 라인
    • 리퀘스트 라인: 리퀘스트에 사용하는 메소드와 URI, HTTP 버전이 포함됨
    • 상태 라인: 리스폰스 결과를 나타내는 상태 코드와 설명, 사용하는 HTTP 버전이 포함됨
  2. 헤더 필드: 리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타냄
    • 리퀘스트/리스폰스 헤어 필드, 일반 헤더 필드, 엔티티 헤더 필드 등

 

인코딩으로 전송 효율을 높이다

  • HTTP로 데이터를 전송할 때 인코딩(변환)을 하면 전송 효율을 높일 수 있음
  • 메시지: HTTP 통신의 기본 단위로 8비트로 구성되고 통신을 통해 전송됨
  • 엔티티: 리퀘스트랑 리스폰스의 페이로드(payload)로 전송되는 정보로 엔티티 헤더 필드와 엔티티 바디로 구성됨
  • 콘텐츠 코딩 (Content Codings)
    • 엔티티를 압축함
    • 콘텐츠 코딩된 엔티티는 수신한 클라이언트 측에서 디코딩함
  • 청크 전송 코딩 (Chunked transfer Coding)
    • 엔티티 바디를 청크(덩어리)로 분해
    • 청크 전송 코딩된 엔티티 바디를 수신한 클라이언트 측에서 원래의 엔티티 바디로 디코딩함

 

여러 데이터를 보내는 멀티파트

  • 멀티파트 (Multipart): 텍스트, 이미지, 영상 등 여러 다른 종류의 데이터를 수용하는 방법
  • HTTP도 멀티파트에 대응하고 있기 때문에 하나의 메시지 바디 내부에 엔티티를 여러 개 포함시켜 보낼 수 있음
    • 주로 이미지나 텍스트 파일 등을 업로드할 때 사용
    • HTTP 메시지로 멀티파트를 사용할 때는 `Content-Type` 헤더 필드 사용
    Content-Type: multipart/form-data;
    Content-Type: multipart/byteranges;

 

일부분만 받는 레인지 리퀘스트

  • 리줌(Resume): 다운로드 중에 커넥션이 끊어진 경우 이전에 다운로드를 한 곳부터 다운로드를 재개하는 기능
    • 이 기능의 실현을 위해서는 엔티티의 범위를 지정해서 다운로드해야 함
  • 레인지 리퀘스트 (Range Request)
    • 바이트의 범위를 지정하여 리퀘스트 하는 것
    • 리퀘스트 할 때 `Range` 헤더 필드를 사용해서 리소스의 바이트 레인지를 지정함
    // 5.001~10,000 바이트
    Range: bytes = 5001-10000
    
    // 5,001 바이트 이상
    Range: bytes = 5001-

 

최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션

  • 콘텐츠 네고시에이션 (Content Negotiation)
    • 클라이언트와 서버가 제공하는 리소스의 내용에 대해서 교섭
    • 클라이언트에 더욱 적합한 리소스를 제공하기 위한 목적
    • 제공하는 리소스를 언어, 인코딩 방식 등을 기준으로 판단함
    • 판단 기준은 리퀘스트 메시지에 포함된 리퀘스트 헤더 필드
    Accept
    Accept-Charset
    Accept-Encoding
    Accept-Language
    Content-Language
    • 예시: 브라우저 설정 언어에 따라 구글이 영어판 혹은 한국어판 페이지로 표시됨

 


이 글은 《그림으로 배우는 Http & Network Basic》를 참고하여 작성하였습니다.

 

 

'네트워크' 카테고리의 다른 글

HTTP와 연계하는 웹 서버  (0) 2023.09.04
HTTP 상태 코드  (0) 2023.07.28
HTTP 프로토콜의 구조  (0) 2023.07.13
웹과 네트워크의 기본  (0) 2023.07.13

댓글