일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MSCS
- aws자격증
- 언어모델
- transformer
- 클라우드
- 머신러닝 파이프라인
- 클라우드자격증
- 네트워크
- COFIBA
- BANDiT
- Collaborative Filtering Bandit
- BERT
- MLOps
- 메타버스
- llm
- 자연어처리
- MAB
- HTTP
- 추천시스템
- 미국석사
- BERT이해
- 중국플랫폼
- 플랫폼
- chatGPT
- 머신러닝
- RecSys
- TFX
- docker
- AWS
- nlp
- Today
- Total
Julie의 Tech 블로그
HTTP - (9) 메시지 엔터티와 인코딩 본문
HTTP는 수십억 개의 미디어 콘텐츠를 실어 나른다.
이 때 콘텐츠는 압축된 형태로 운반되는데, 이 압축된 콘텐츠는 네트워크 상에서 조작되지 않아야한다.
또한 효율적으로 네트워크 내에서 전송되어야하며, 압축을 올바르게 풀 수 있어야한다.
이러한 원칙들을 만족하도록 HTTP 메시지 엔터티의 포맷과 동작방식에 규율이 있다.
엔터티는 엔터티 헤더와 본문 내용으로 구성된다.
엔터티 헤더에는 Content-Type (객체 종류), Content-Length (메시지 길이), Content-Language 등이 있다.
엔터티 본문이 완전 raw단 데이터이기 때문에, 엔터티 헤더가 본문에 대한 의미를 내포한다.
헤더와 본문은 빈 줄 (CRLF) 로 구분된다.
엔터티 헤더 몇 개에 대해 좀 더 살펴보자.
- Content-Length : 엔터티 길이
커넥션이 닫힐 때 메시지가 잘렸는지/정상적으로 닫힌건지 검사할 때 사용된다. 필수 헤더이다
지속 커넥션을 이용할 때도 필수이다. Content-length헤더를 통해 메시지 시작과 끝을 파악한다.
본문이 인코딩되어있다면, 인코딩 된 길이로 정의한다.
- Content-MD5 : 엔터티 요약
TCP/IP와 같이 신뢰할만한 프로토콜에서도 메시지 일부가 변형될 수 있다.
수신자가 엔터티의 변경을 잡아내기 위해 체크섬으로 검사를 하게 되는데, 이 헤더가 사용된다.
- Content-Type : 미디어 타입
엔터티 본문의 MIME 타입을 담고 있다. text/html, image/gif, audio/x-wav 등이 있다.
콘텐츠를 인코딩하여 보내는 것이 일반적이다.
압축하거나 암호화하여 보내는데, 보통 발송하는 쪽에서 적용한 뒤 발송한다.
콘텐츠 인코딩은 콘텐츠 인코딩 서버에서 진행되고, 인코딩된 메시지의 Content-Length는 달라지게 된다.
Content-Type은 그대로이며, Content-Encoding헤더를 포함하여 수신쪽에서 디코딩할 수 있게 안내한다.
보통 클라이언트가 서버 측으로 디코딩 가능한 리스트를 보내주는데, 바로 Accept-Encoding헤더이다.
이 리스트에 Q값(quality)을 더하여 각 디코딩 방법에 대한 선호도를 표기한다.
서버는 이 리스트에 따라 적절한 인코딩 메서드를 선택하여 본문을 인코딩한다.
웹에 담기는 콘텐츠는 정적이지 않다. 항상 변화한다.
우리가 네이버 홈화면을 누를 때도 누를 때마다 사이트가 변화한다. 이를 인스턴스 조작이라고 부른다.
앞선 글에서 캐시를 다루면서, 페이지 신선도 검사에 대한 이야기를 했었다.
클라이언트가 서버로부터 받은 리소스를 캐시해두는데, 이 캐시된 페이지를 사용하려면 만료 여부를 확인한다.
서버는 Expires나 Cache-Control헤더를 통해 캐싱에 대해 조절한다.
클라이언트는 본인이 캐시한 문서가 신선하지 않을 경우 다시 새로운 문서로 변환할 필요가 있다.
클라이언트가 캐시한 문서가 신선한 것인지 판단하는 검사기가 두 종류로 나뉜다.
하나는 약한 검사기로, 예를 들어 바이트 수를 세는 경우 바이트는 동일하지만 내용물은 변경된 것일 수 있다.
강력한 검사기는 Etag헤더 혹은 MD5 체크섬을 활용하여 확인하는 것이다.
클라이언트는 서버로 조건부 요청을 보내어 캐시된 문서가 특정 시간 이후로 수정된 것이 있는지 확인한다.
(If-Modified-Since, If-Match, If-None-Match 등 헤더 사용)
델타 인코딩은 웹 문서 내 특정 인스턴스만이 변경되었을 때, 변경된 부분에 대해서만 통신하는 방법이다.
클라이언트는 델타 인코딩된 문서를 요청하고 받아 적용한다.
가장 처음에 어떤 버전을 갖고 있는지 서버에게 알려주고, 델타를 받아와 새로운 식별자(Etag)를 저장한다.
이 때 델타 인코딩을 받아들일 수 있다는 의미로 A-IM헤더를 보낸다. (Accept-Instance-Manipulation)
A-IM헤더의 값으로는, 인스턴스 조작 종류를 보내게 되는데,
예를 들어 diffe라는 값을 보내게 되면 줄 단위 비교를 하여
5c.chisels.와 같이 5번째 줄을 지우고 chisels를 추가하라는 의미의 델타를 보내게 된다.
참고도서
'Tech' 카테고리의 다른 글
HTTP - (11) 내용 협상과 트랜스코딩 (0) | 2021.07.04 |
---|---|
HTTP - (10) 국제화 (0) | 2021.06.21 |
HTTP - 인증 : Oauth, JWT, Bearer token (0) | 2021.06.14 |
HTTP - (8) HTTPS, 보안 (0) | 2021.06.14 |
HTTP - (7) 다이제스트 인증 (0) | 2021.06.14 |