이번 TIL은 인프런의 "모든 개발자를 위한 HTTP 웹 기본 지식"을 학습하고, 정리한 내용입니다.
만약, 제 글의 내용을 퍼갈 시에는 " 모든 개발자를 위한 HTTP 웹 기본 지식 "도 출처에 첨부하시기 바랍니다.
HTTP에서 전송하는 방식은 대표적으로 다음과 같다.
요청을 하면, 응답을 주는데, 메세지 바디에 대한 컨텐트 length를 지정하는 거다.
다시 말해서, Content-Length를 알 수 있을 때 쓰는 거다.
단순하게 한 번 요청하고, 한 번에 쭉~ 받는 거다.
예를 들어, 서버에서 gzip같은 거로 압축하면 용량이 확 줄어든다. 보통 절반 이상으로 줄어든다.
대신, 압축을 하면, Content-Encoding
이라는 것을 추가로 넣어줘야한다.
=> 뭘로 압축되어 있는지 알아야 하니까, 그래야 클라이언트도 어떻게 압축을 풀지 안다.
그래서, 이것을 압축 전송이라고 한다.
chunked
는 덩어리라는 말이다. 즉, 덩어리로 쪼개서 보낸다는 뜻이다.
한 번에 보내면, 로딩 시간이 길어지기 때문에 분할해서 보낸다.
이 경우에는 5 바이트 해서 Hello를 먼저 보낸다. 그러면, 클라이언트는 먼저 이걸 일단 받아볼 수 있다.
그 다음에 또 서버에서 5 바이트가 만들어지면, 또 클라이언트에 보낸다.
이렇게 끝나면, 마지막에는 0 이라고 표시하고, \r\n
은 "끝"이라는 뜻이다.
왜냐면, Content-Length가 처음에 예상이 안 된다.
이미지를 받는데, 뭔가 중간에 받아가 다운로드가 끊겼다.
이때, 처음부터 다시 요청하면 용량이 아까우니까 범위 전송 같은 경우는 범위를 지정해서 요청한다.
"나는 절반은 받았으니까, 나머지 절반만 보내주세요~"
Content-Range
를 통해서, 범위를 설정할 수 있다.