HTTP 메시지에 대해 알아보자.

📌 HTTP 메시지의 구조

전체 구조

최초에 나타나는 개행 문자로 메시지 헤더메시지 바디로 구분한다.

리퀘스트 메시지 & 리스폰스 메시지 구조

리퀘스트 라인

리퀘스트에 사용하는 메소드 & 리퀘스트 URI & 사용하는 HTTP 버전을 포함한다.

상태 라인

리스폰스 결과를 나타내는 상태 코드 & 설명 & 사용하는 HTTP 버전을 포함한다.

헤더 필드

리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타내는 각종 헤더 필드가 포함한다.
아래 4가지 종류가 존재한다.
일반 헤더 필드
리퀘스트 헤더 필드
리스폰스 헤더 필드
엔티티 헤더 필드

그 외

HTTP의 RFC에는 없는 헤더 필드(쿠키 등)이 포함되는 경우가 있다)

인코딩으로 전송 효율 높이기

HTTP로 데이터를 전송할 경우 그대로 전송할 수 있지만, 인코딩으로 전송 효율을 높일 수 있다. 전송할 때 인코딩을 하면 다량의 액세스를 효율 좋게 처리할 수 있다. 단지 컴퓨터에서 인코딩 처리를 해야 하기 때문에 CPU 등의 리소스는 보다 많이 소요하게 된다.

메시지 바디 & 엔티티 바디 차이

메시지 : HTTP 통신 기본 단위, 옥텟 시퀀스로 구성되고 통신을 통해 전송
엔티티 : 리퀘스트 & 리스폰스의 페이로드로 전송되는 정보 (엔티티 헤더 필드, 엔티티 바디로 구성)

콘텐츠 코딩(Content Codings)

엔티티에 적용하는 인코딩을 가리키며, 서버에서 엔티티 정보를 유지한채로 압축한다. 그리고 콘텐츠 코딩된 엔티티는 클라이언트에서 디코딩한다.
주요 콘텐츠 압축
gzip(GNU zip)
compress(UNIX의 표준 압축)
deflate(zlib)
identity(인코딩 없음)

청크 전송 코딩(Chunked trasfer Coding)

HTTP 통신에서는 리퀘스트 했던 리소스 전부에서 엔티티 바디의 전송이 완료되지 않으면 브라우저에 표시되지 않는다. 사이즈가 큰 경우 데이터를 분할해서 조금씩 표시할 수 있다. 이때 엔티티 바디를 분할하는 기능을 청크 전송 코딩이라 부른다. 엔티티 덩어리 → 청크(덩어리)로 분해

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

HTP는 여러 다른 종류의 데이터를 수용하는 방법인 멀티파트에 대응하고 있다. 따라서 하나의 메시지 바디 내부에 엔티티를 여러 개 포함시켜 보낼 수 있다. 주로 이미지나 텍스트 파일 등을 업로드할 때 사용되고 있다.

일부분만 받는 레인지 리퀘스트(Range Request)

대용량 데이터를 다운로드 받는 도중에 커넥션이 끊어지면, 처음부터 다시 다운로드 해야 하는 상황이 발생할 수 있다. 이를 해결하기 위해 일반적인 리줌이라는 기능이 필요하게 되었다.
💡
리줌(resume)? 이전에 다운로드 한 곳에서부터 다운로드를 재개할 수 있다.
리줌을 실현하기 위해 엔티티 범위를 지정해서 다운로드 할 필요가 있다. 따라서 범위를 지정해서 리퀘스트 하는 것을 레인지 리퀘스트라고 부른다. (5,001 ~ 10,000 바이트 범위만을 리퀘스트 할 수 있다)

예시

Range: bytes = 5001-10000 //5,001 ~ 10,000 바이트 Range: bytes = 5001- //5,001 바이트 이상 Range: bytes = -3000, 5000-7000 //처음부터 3,000 바이트까지, 5,000 ~ 7,000 바이트까지
Plain Text
TOP