웹 개발 메모장

[http] HTTP 메시지의 전달 방법들 본문

옛날../http

[http] HTTP 메시지의 전달 방법들

도로롱주 2017. 12. 29. 16:04




HTTP 메시지의 전달 방법들




콘텐츠 코딩(압축 전송)


HTTP 메시지를 주고받을 때 전송 효율을 높이기 위해 엔티티를 작게 압축해서 주고 받을 수 있습니다.

전송 효율은 좋아지지만 압축 과정에서 CPU 등 리소스를 다소 소모하게 됩니다.


  

콘텐츠 압축의 종류

  gzip(GNU zip)

 compress(유닉스의 표준 압축)

 deflate(zlib)

 identity(인코딩 없음)




청크 전송 코딩(분할 전송)


HTTP 메시지를 주고받을 때 데이터가 큰 경우 엔티티 바디분할해서 전송합니다.

청크 전송 인코딩의 경우 서버는 전체 메시지의 크기를 모르더라도 HTTP 프로토콜을 사용해서 데이터를 전송합니다. 마지막 청크된 패킷에 도달할 때 까지 DataSize 값을 추적합니다. 길이가 0인 패킷이 마지막 패킷이며 이때 DataSize를 알 수 있습니다. 서버는 청크 전송 코딩에서 Content-Length 값을 지원하지 않으므로 각 청크의 페더는 청크 길이 항목을 포함합니다. 결과적으로 청크의 실게 총 길이가 동적으로 계산됩니다.



멀티 파트


하나의 HTTP 메시지 바디 내부에 엔티티를 여러개 포함시켜 전송하는 경우를 말합니다.

Content-type 헤더 필드를 사용해서  Content-type: multipart/ 를 명시해서 사용합니다.


멀티 파트

설명

mutlipart/form-data

 웹 폼으로 부터 파일 업로드에 사용됩니다.

mutlipart/byteranges

 상태코드 206 메시지가 복수 범위의 내용을 포함하는 때에 사용됩니다.




Range Request


서버에 요청을 보낼 때 엔티티의 범위를 지정해서 받아옵니다.

예를 들어 총 10,000 바이트라고 할 때 1,000 바이트씩 나눠서 받아오면 전송이 끊기더라도 이미 받아놓은 데이터의 범위를 제외한 나머지 범위만 요청하면 되기 때문에 이어 받기를 가능하게 해줍니다.


예시)


[Request]

1
2
3
GET /dong.jpg HTTP/1.1
Host: dororongju.tistory.com
Range: bytes=9001-10000
cs


[Response]

1
2
3
4
5
HTTP/1.1 206 Partial Content
Date: Fri, 13 Jul 2012 04:39:17 GMT
Content-Range: bytes 9001-10000/10000
Content-Length:1000
Content-Type:image/jpeg
cs




Contents Negotiation


한국에서 구글에 접속했을 때와 미국에서 구글에 접속했을 때, 한국에서는 한국어 사이트로 미국에서는 영어 사이트로 이동합니다. 이렇게 클라이언트에 더욱 적합한 리소스를 제공하기 위해 교섭하는 것을 말합니다.


서버에서 브라우저가 보내는 정보를 근거로 처리하는 방법(Server-driven Negotiation)

브라우저에서 표시 된 선택지 중에서 유저가 수동으로 선택하는 방법(Agent-driven Negotiation)

서버에서 판단해서 처리하고 브라우저에서도 선택 가능한 방법(Transparent Negotiation)


들이 있습니다.



Comments