솜이의 데브로그

3장 ) HTTP 정보는 HTTP 메시지에 있다 본문

CS/Network

3장 ) HTTP 정보는 HTTP 메시지에 있다

somsoming 2021. 9. 22. 21:36

Reference : 그림으로 배우는 Http&Network Basic

 

 

HTTP 메시지

  • HTTP에서 교환하는 정보를 HTTP 메시지라고 한다.
  • HTTP 메시지는 복수 행의 데이터로 구성된 텍스트 문자열이다.
  • 메시지 헤더와 메시지 바디로 구성되어 있다.
  • 최초에 나타나는 개행 문자 (CR+LF)로 메시지 헤더와 바디를 구분.

http://www.cleantutorials.com/html/format-of-http-request-response-header-and-body-with-example

 

 

리퀘스트 메시지와 리스폰스 메시지의 구조

(위 그림 참고)

 

  • 리퀘스트 라인 : 리퀘스트에 사용하는 메소드와 리퀘스트 URI와 사용하는 HTTP 버전이 포함됨.
  • 상태 라인 : 리스폰스 결과를 나타내는 상태코드와 설명, 사용하는 HTTP 버전 포함.
  • 헤더 필드 : 리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타내는 각종 헤더 필드 포함. (일반 헤더 필드, 리퀘스트 헤더 필드, 리스폰스 헤더 필드, 엔티티 헤더 필드 등)
  • 그 외 : HTTP의 RFC에는 없는 헤더 필드(쿠키 등)가 포함.

 

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

  • 전송 시 인코딩을 하면 다량의 액세스를 효율 좋게 처리할 수 있다.
  • 인코딩 처리를 해야하기 때문에 CPU등의 리소스를 많이 소비함.
  • 메시지 : HTTP 통신의 기본 단위로, 옥텟 시퀀스로 구성되며 통신을 통해 전송된다.
  • 엔티티 : 리퀘스트랑 리스폰스의 페이로드로 전송되는 정보로 엔티티 헤더 필드와 엔티티 바디로 구성된다.
  • 기본적으로 메시지 바디와 엔티티 바디는 같지만 전송 코딩이 적용된 경우 엔티티 바디의 내용은 변화하므로 메시지 바디와 달라진다.

 

콘텐츠 코딩

  • 엔티티에 적용하는 인코딩
  • 엔티티 정보를 유지한 채로 압축한다.
  • 콘텐츠 코디된 엔티티는 수신한 클라이언트 측에서 디코딩한다.

 

청크 전송 코딩

  • 엔티티 바디를 청크(덩어리)로 분해한다.
  • 청크 사이즈를 16진수로 사용해서 단락을 표시하고 엔티티 바디 끝에 "0(CR+LF)"를 기록한다.
  • 청크 전송 코딩된 엔티티 바디는 수신한 클라이언트 측에서 디코딩한다.
  • 이런식으로 사이즈가 큰 데이터를 전송 시 엔티티 바디를 분할하여 전송.

 

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

  • MIME : 이미지 등의 바이너리 데이터를 아스키 문자열에 인코딩하는 방법과 데이터 종류를 나타내는 법 등을 규정.
  • 멀티 파트 : 여러 다른 종류의 데이터를 수용하는 방법
  • HTTP도 멀티파트에 대응하고 있어 하나의 메시지 바디 내부에 엔티티를 여러개 포함하여 보낼 수 있다. 주로 이미지나 텍스트 파일 등을 업로드 할 때 사용.
    • multipart/form-data : Web 폼으로부터 파일 업로드에 사용
    • multipart/byteranges : 상태코드 206 리스폰스 메시지가 복수 범위의 내용을 포함할 때 사용
  • HTTP 메시지로 멀티파트를 사용할 때는 Content-type 헤더 필드를 사용한다.
  • 멀티파트 각각의 엔티티를 구분하기 위해 boundary 문자열 사용
  • 파트마다 헤더 필드 포함.

 

 

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

  • resume (리줌) : 대용량 이미지와 데이터를 다운로드 시 커넥션이 끊어졌을 때의 문제 해결하기 위해 이전 다운로드 한 곳에서부터 다운로드를 재개할 수 있는 기능.
  • 엔티티의 범위를 지정해서 다운로드. 범위를 지정하여 리퀘스트.
  • Range 헤더 필드를 사용해 리소스 바이트 레인지를 지정.
  • ex)5001~10000byte
    Range: bytes = 5001-10000
  • 레인지 리퀘스트에 대한 리스폰스는 상태코드 206 Partial Content라는 리스폰스 메시지가 되돌아온다.
  • 서버가 레인지 리퀘스트에 지원하지 않는 경우 상태코드 200OK라는 리스폰스 메시지로 완전한 엔티티가 돌아온다.

 

 

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

  • 네고시에이션 : 같은 내용이지만 여러 개의 페이지를 지닌 웹 페이지의 경우, 최적의 콘텐츠를 표시하는 구조. ex : 영어,한국어 중 브라우저의 언어에 맞는 페이지를 표시.
  • 콘텐츠 네고시에이션 : 클라이언트와 서버가 제공하는 리소스의 내용에 대해 교섭하는 것. 클라이언트에 더욱 적합한 리소스를 제공하기 위한 구조.
    • 언어와 문자 세트, 인코딩 방식 등을 기준으로 판단.
    • 판단 기준은 리퀘스트 메시지에 포함된 리퀘스트 헤더 필드.
    • 서버 구동형 네고시에이션 : 서버 측에서 콘텐츠 네고시에이션을 함. 서버 측에서 리퀘스트 헤더 필드의 정보를 참고해 자동적으로 처리
    • 에이전트 구동형 네고시에이션 : 클라이언트 측에서 콘텐츠 네고시에이션. 브라우저에 표시된 선택지 중에서 유저가 수동으로 선택. JS 사용해 웹페이지에서 자동적으로 정하기도 함. ex) 스마트폰용 웹페이지 자동 전환
    • 트랜스페어런트 네고시에이션 : 서버구동형과 에이전트 구동형을 혼합.

'CS > Network' 카테고리의 다른 글

4장 ) 결과를 전달하는 HTTP 상태코드  (0) 2021.09.30
4장 ) 데이터링크 계층  (0) 2021.09.30
3장 ) 물리계층  (0) 2021.09.22
2장 ) 간단한 프로토콜 HTTP  (0) 2021.09.18
2장 ) 네트워크 기본 규칙  (0) 2021.09.18