Http&Network Basic - 3

haechi·2022년 9월 13일
0

Web

목록 보기
63/69

Chapter#3


HTTP 메시지

HTTP에서 교환하는 정보.
복수 행의 데이터로 구성된 텍스트 문자열이다. 크게 메시지 헤더와 메시지 바디로 구성되어 있다. 둘의 구분은 최초로 나타나는 개행 문자로 한다.

[메시지 헤더] - 서버와 클라이언트가 꼭 처리해야 하는 리퀘스트와 리스폰스 내용과 속성 등
[메시지 바디] - 꼭 전송되는 데이터 그 자체

  • 리퀘스트 메시지 : 리퀘스트 측 HTTP 메시지 - 메시지 헤더 구조 -> (리퀘스트 라인 / 리퀘스트 헤더 필드 / 일반 헤더 필드 / 엔티티 헤더 필드)
  • 리스폰스 메시지 : 리스폰스 측 HTTP 메시지 - 메시지 헤더 구조 -> (상태 라인 / 리스폰스 헤더 필드 / 일반 헤더 필드 / 엔티티 헤더 필드)
    • 리퀘스트 라인
      리퀘스트에 사용하는 메소드와 리퀘스트 URI와 사용하는 HTTP 버전 포함
    • 상태 라인
      리스폰스 결과를 나타내는 상태 코드와 설명, 사용하는 HTTP 버전 포함
    • 헤더 필드
      리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타내는 각종 헤더 필드 포함
      -> 일반/리퀘스트/리스폰스/엔티티 헤더 필드 4종류

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

HTTP로 데이터를 전송할 때 인코딩(변환)을 실시함으로써 전송 효율을 높일 수 있다.
-> 다량의 액세스를 효율 좋게 처리할 수 있지만, 컴퓨터에서 인코딩 처리를 해야하기에 CPU 등의 리소스는 보다 많이 소비한다.

메시지 바디와 엔티티 바디의 차이

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

HTTP 메시지 바디의 역할 : 리퀘스트와 리스폰스에 관한 엔티티 바디를 운반하는 일.
(기본적으로 메시지 바디와 엔티티 바디는 같지만 전송 코딩이 적용된 경우에는 엔티티 바디의 내용이 변화하기 때문에 메시지 바디와 달라진다.)

압축해서 보내는 콘텐츠 코딩

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

-주요 콘텐츠 압축

  • gzip(GNU zip)
  • compress(UNIX의 표준 압축)
  • deflate(zlib)
  • identity(인코딩 없음)

분해해서 보내는 청크 전송 코딩

엔티티 바디를 분할하는 기능
-> 분해한 것은 청크(덩어리)라고 부른다 -> 이렇게 엔티티 바디를 작게 쪼개고 나서 송신 -> 클라이언트 측에서 다시 복원(디코딩)


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

MIME(Multipurpose Internet Mail Extensions) : 다목적 인터넷 메일 확장 사양 -> 메일에서 텍스트나 영상, 이미지와 같은 여러 다른 데이터를 다루기 위해서 사용.
HTTP 또한 멀티파트에 대응하고 있어 하나의 메시지 바디 내부에 엔티티를 여러 개 포함시켜 보낼 수 있다. 주로 이미지나 텍스트 파일 등 업로드할때 사용된다.

-주요 멀티파트

  • multipart/form-data
    web 폼으로부터 파일 업로드에 사용
  • multipart/byteranges
    상태 코드 206(Partial Content) 리스폰스 메시지가 복수 범위의 내용을 포함하는 때 사용

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

엔티티의 범위를 지정하여 리퀘스트 하는 것을 말한다.
Range: bytes = 5001-10000과 같이 범위를 지정하여 리퀘스트 할 수 있다.
-> 현재는 광대역의 네트워크를 이용할 수 있으나, 과거에는 불가능 하였기에 대용량의 이미지와 데이터를 다운로드가 힘들었다. 다운로드 중 커넥션이 끊어지면 처음부터 다시 다운로드를 해야했다. -> 이를 해결하기 위해 이전에 다운로드 한 곳에서부터 다운로드를 받도록하는 기능이 필요했다.

레인지 리퀘스트에 대한 리스폰스는 상태 코드 206 Partial Content 라는 리스폰스 메시지가 돌아온다. 복수 범위의 레인지 리퀘스트라면 multipart/byteranges로 돌아온다. -> 서버가 레인지 리퀘스트를 지원하지 않는 경우 200 OK로 완전한 엔티티가 돌아온다.


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

클라이언트와 서버가 제공하는 리소스의 내용에 대해서 교섭하는 것. 클라이언트에 더욱 적합한 리소스를 제공하기 위한 구조
-> 제공하는 리소스를 언어와 문자 세트, 인코딩 방식 등을 기준으로 판단한다.

  • 판단 기준(리퀘스트 메시지에 포함 된 리퀘스트 헤더필드)
    - Accept
    • Accept-Charset
    • Accept-Encoding
    • Accept-Language
    • Content-Language
  • 콘텐츠 네고시에이션의 종류
    - 서버 구동형 네고시에이션(Server-driven Negotiation)
    서버 측에서 콘텐츠 네고시에이션을 하는 방식. -> 서버 측에서 리퀘스트 헤더 필드의 정보를 참고해서 자동적으로 처리
    - 에이전트 구동형 네고시에이션(Agent-driven Negotiation)
    클라이언트 측에서 콘텐츠 네고시에이션을 하는 방식. -> 브라우저에 표시된 선택지 중에서 유저가 수동으로 선택
    - 트랜스페어런트 네고시에이션(Transparent Negotiation)
    서버 구동형과 에이전트 구동형을 혼합한 것. 서버와 클라이언트가 각각 네고시에이션을 하는 방식

    같은 콘텐츠이지만 여러 개의 페이지를 지닌 웹 페이지가 있다. ex) 영어, 한국어판과 같은 같은 페이지지만 언어가 다름.
    이런 웹 페이지에서는 서로 다른 언어를 주로 사용하는 브라우저가 같은 URI에 액세스할 때, 각각 다른 언어판 웹 페이지를 표시하는데 이와 같은 구조를 콘텐츠 네고시에이션(Content Negotiation)이라고 부른다.

profile
공부중인 것들 기록

0개의 댓글

관련 채용 정보