[Network] HTTP 정보는 HTTP 메소드에 있다
HTTP 메시지
- HTTP 메시지 : HTTP에서 교환하는 정보
- req 측 : 리퀘스트 메시지/ res 측: 리스폰스 메시지
- 복수 행의 데이터로 구성된 텍스트 문자열
- 메시지 헤더와 메시지 바디로 구성
- 개행 문자(CR+LF)로 메시지 헤더와 바디를 구분
리퀘스트 메시지와 리스폰스 메시지의 구조
- 리퀘스트 라인
- 리퀘스트 메소드, 리퀘스트 URI, HTTP 버전이 포함
- 상태 라인
- 상태 코드와 설명, HTTP 버전이 포함
- 헤더 필드
- req와 res의 여러 조건과 속성 등을 나타내는 각종 헤더 필드 포함
- 일반, req, res, 엔티티 헤더 필드 등 4종류가 있음
- 그 외
- HTTP의 RFC에는 없는 헤더 필드(쿠키 등)가 포함되는 경우
인코딩으로 전송 효율을 높이다
- 데이터를 전송할 때 인코딩(변환) 하면
- 전송 효율을 높일 수 있음
- 다량의 액세스를 효율 좋게 처리 가능
- 인코딩 처리를 위해 CPU 등의 리소스가 많이 소비됨
메시지 바디와 엔티티 바디의 차이
- 메시지(message)
- HTTP 통신의 기본 단위로 옥텟 시퀀스(Octet sequence)로 구성되고 통신을 통해 전송
옥텟(Octet) : 8비트
- 메시지 바디의 역할
- req와 res에 관한 엔티티 바디를 운반하는 일
- 엔티티(entity)
- req와 res의 페이로드(payload, 부가물)로 전송되는 정보
- 엔티티 헤더 필드와 엔티티 바디로 구성
압축해서 보내는 콘텐츠 코딩
- 콘텐츠 코딩(Content Codings)
- HTTP에서 엔티티에 적용하는 인코딩을 말함
- 엔티티 정보를 유지한채로 압축함
- 콘텐츠 코딩된 엔티티는 수신한 클라언트 측에서 디코딩 함
- 주요 콘텐츠 압축 종류
- gzip(GNU zip)
- compress(UNIX의 표준 압축)
- deflate(zlib)
- identity(인코딩 없음)
분해해서 보내는 청크 전송 코딩
- 청크 전송 코딩(Chunked transfer Coding)
- 엔티티 바디를 청크(덩어리로) 분할하는 기능
- 청크 전송 코딩된 엔티티 바디는 수신한 클라이언트 측에서 디코딩 함
여러 데이터를 보내는 멀티파트
- MIME(다목적 인터넷 메일 확장 사양)
- 메일로 텍스트, 영상, 이미지 등 여러 다른 데이터를 다루기 위한 기능
MIME(Multipurpose Internet Mail Extensions)
일부분만 받는 레인지 리퀘스트
광대역의 네트워크가 발전하기 전에는 대용량의 이미지와 데이터를 다운로드 중에 커넥션이 끊기면 처음부터 다시 다운로드 해야했다. -> 다운로드 받는데 어려움이 있었음
- 리줌(resume)
- 이전에 다운로드를 한 곳에서 부터 다운로드 재개 가능
- 리줌을 실현하기 위해서는 엔티티의 범위를 지정해서 다운로드 해야함 -> 레인지 리퀘스트
- 레인지 리퀘스트(Range Request)
- 범위를 지정하여 req하는 것
- 리소스에서 지정한 바이트의 범위(바이트 레인지)만을 req 할 수 있음
- Range 헤더 필드를 사용해 리소스의 바이트 레인지를 지정함
최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션
- 콘텐츠 네고시에이션(Content Negotiation)
- 같은 콘텐츠(내용)지만 영어판과 한국판 같이 표시되는 언어가 다른 웹페이지
- 브라우저가 같은 URI에 액세스할 때 각 언어에 맞는 웹페이지를 표시
콘텐츠 네코시에이션 종류
- 서버 구동형 네고시에이션(Server-driven Negotiation)
- 서버 측에서 콘텐츠 네고시에이션을 하는 방식
- 에이전트 구동형 네고시에이션(Agent-driven Negotiation)
- 클라이언트 측에서 콘텐츠 네고시에이션을 하는 방식
- 트랜스페어런트 네고시에이션(Transparent Negotiation)
- 서버 구동형과 에이전트 구동형을 혼합한 것
- 서버와 클라이언트가 각각 콘텐츠 네고시에이션 하는 방식