티스토리 뷰

개발직설/네트워크

[네트워크] HTTP 메시지

SdardewValley 2021. 11. 3. 22:16
반응형

HTTP 메시지

  • HTTP에서 교환하는 정보
  • 리퀘스트 메시지와 리스폰스 메시지가 있음
  • 여러 줄의 텍스트 데이터로 구성
  • 메시지 헤더와 메시지 바디로 구성
  • 개행문자로 헤더와 바디를 구분 (개행문자는 CRLF를 사용)
  • 바디가 없을 수도 있음
💡 CRLF

CR과 LF의 조합
CR(\r): Carriage Return
LF(\n): Line Feed

 

 

메시지 헤더

리퀘스트 메시지 헤더

리퀘스트 라인
리퀘스트 헤더 필드
일반 헤더 필드
엔티티 헤더 필드
etc.

 

리스폰스 메시지 헤더

상태 라인
리스폰스 헤더 필드
일반 헤더 필드
엔티티 헤더 필드
etc.

 

  • 리퀘스트 라인
    • 리퀘스트에 사용하는 메서드
    • 리퀘스트 URI
    • 사용하는 HTTP 버전

 

  • 상태 라인
    • 리스폰스 결과의 상태 코드 & 설명
    • 사용하는 HTTP 버전

 

  • 헤더 필드
    • 리퀘스트와 리스폰스의 여러 조건과 속성

 

 

인코딩

사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것
  • 전송 효율이 높아짐
  • 다량의 액세스를 효율적으로 처리
  • 인코딩을 위해서 리소스를 소비함

 

메시지 & 엔티티 차이

  • 메시지
    • HTTP 통신의 기본 단위
    • 8비트(Octet sequence)로 구성
    • 통신을 통해 전송

 

  • 엔티티
    • 페이로드(payload)로 전송되는 정보
    • 엔티티 헤더와 엔티티 바디로 구성

 

💡 페이로드

사용에 있어서 전송되는 데이터. 전송의 근본적이 목적이 되는 데이터. 전송 행위의 본래 의도.
컴퓨터 보안에서 페이로드는 그 소프트웨어가 주는 피해를 뜻함.

 

HTTP 메시지 바디의 역할은 엔티티 바디를 운반하는 역할을 한다. 

 

 

Content Codings

  • 용량을 줄이기 위해 파일을 압축하는 것
  • 엔티티에 적용하는 인코딩
  • 콘텐츠 코딩된 엔티티는 클라이언트 측에서 디코딩

 

 

Chunked Transfer Coding

  • 엔티티 바디를 청크(덩어리)로 분할하여 전송하는 것
  • 16진수로 다음 청크 사이즈 표시
  • 엔티티 바디 끝은 0(CRLF)
  • 클라이언트에서 원래의 엔티티 바디로 복원

 

 

Multipart

  • 메시지 바디 내부에 여러 개의 엔티티(텍스트나 이미지 등)를 포함시켜 보내기 위한 기능
  • HTTP 메시지로 멀티파트를 사용할 때는 Content-type 헤더 필드를 사용

 

멀티파트의 종류

  • multipart/form-data: 파일 업로드에 사용
  • multipart/byteranges: 상태 코드 206 리스폰스 메시지가 복수의 내용을 포함할 때 사용

 

💡 MIME(Multipurpose Internet Mail Extensions)

 메일에서 텍스트, 이미지 등의 다른 종류의 데이터를 다루기 위한 기능

 

 

Range Request

  • resume(재개) 기능
  • 중간에 연결이 끊긴 다운로드를 재개하기 위해서 사용
  • 다운로드를 재개하기 위해서 범위를 지정하여 다운로드
  • 범위를 지정하여 리퀘스트 하는 것

 

Range Request에 대한 리스폰스 메시지

  • 206 리스폰스 메시지가 수신
  • 복수 범위: multipart/byteranges
  • 서버가 range request를 지원하지 않을 대: 200 OK 메시지

 

리퀘스트 형식

 

5001 ~ 10000 바이트

Range: bytes = 5001-10000

 

5001 바이트 이상

Range: bytes = 5001-

 

처음부터 3000바이트까지와 5000~7000 바이트

Range: bytes = -3000, 5000-7000

 

 

Content Negotiation

  • URI에서 리소스의 서로 다른 버전을 서브하기 위해 사용되는 메커니즘
  • 클라이언트와 서버가 제공하는 리소스의 내용에 대해 교섭하는 것
  • 클라이언트에 더 적합한 리소스 제공 (나라마다 다른 언어의 웹 페이지를 전송)

 

적합한 리소스를 판단하기 위한 기준

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

 

content negotiation 종류

  • Server-driven Negotiation
    • 서버 측에서 사용하는 방식
    • 서버 측에서 리퀘스트 헤더 필드의 정보를 참고하여 처리
    • 브라우저가 보내는 정보이기 때문에 유저에게 적절하다고 보장할 수 없음

 

  • Agent-driven Negotiation
    • 클라이언트 측에서 사용하는 방식
    • 브라우저의 선택지 중에서 선택
    • Javascript를 통해서 자동으로 정할 수도 있음

 

  • Transparent Negotiation
    • Server-driven과 Agent-driven의 혼합
    • 서버와 클라이언트가 각각 하는 방식
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함