멀티파트와 레인지 리퀘스트

채재헌·2022년 12월 9일
0
post-thumbnail

🎈<목차>

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

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

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


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

메일의 경우에는 메일의 본문이나 복수의 첨부 파일을 붙여서 함께 보낼 수 있는데 이것은 MIME(Multipurpose Internet Mail Extensions: 다목적 인터넷 메일 확장 사양)으로 불리고 있다. MIME는 이미지 등의 바이너리 데이터를 아스키 문자열에 인코딩하는 방법과 데이터종류를 나타내는 방법 등을 규정하고 있다. 이 MIME의 확장 사양에 있는 멀티파트(Multipart)라고 하는 여러 다른 종류의 데이터를 수용하는 방법을 사용하고 있는 것이다. HTTP도 멀티파트에 대응하고 있어 하나의 메세지 바디 내부에 엔티티를 여러개 포함시켜 보낼 수 있다. (주로 이미지나 텍스트 파일 등을 업로드 하는데 사용됨)


  • multipart/form-data

    Web 폼으로부터 파일 업로드에 사용된다.

  • mutipart/byterages

    상태 코드 206(Partial Content)리스폰스 메세지가 복수 범위의 내용을 포함하는 때에 사용된다.

  • multipart/form-data

Content-Type:multipart /form-data: boundary=AaB03x
--AaB03x
Content -Disposition:form-data:name="field1"
Joe Blow
--AaB03x
Content-Disposition:form-data: name="pics",filename="file.txt"
Content -Type : text/plain
...(file.1.txt데이터)...
--AaB03x--

  • multipart/byteranges

    HTTP/1.126 Partial Content
    Data:Fri,13 Jul 2012 0245:GMT
    Last-Modified:Fri,31 Aug 2007 02:02:20 GMT
    Content-Type : multipart/byreranges; boundary=THIS_STRING_SEPARTES
    --THIS__STRING_SEPARATES--
    Content-type:application/pdf
    Content-Range:bytes 500-999/8000
    ...(지정한 범위의 데이터)...
    --THIS__STRING_SEPARATES--
    Content-type:application/pdf
    Content-Range:bytes 7000-7999/8000
    ...(지정한 범위의 데이터)...
    --THIS__STRING_SEPARATES--

HTTP 메세지로 멀티파트를 사용할 때에는 Content-type 헤더 필드를 사용한다. 멀티파트 가각의 엔티티를 구분하기 위해 "boundary"문자열을 사용하고 각 엔티티의 선두에는 "boundary"문자열 앞에 "--"을 삽입한다.(예를 들면 "--AaB03x","--THISSTRING_SEPARATES--"). 멀티파트의 마지막에는 그 문자열의 마지막 부분에 "--"를 삽입해서(예를 들면, "AaB03x--"--THISSTRING_SEPARATES--") 마무리한다. 멀티파트는 파트마다 헤더 필드가 포함되고 또한 파트의 중간에 멀티 파트를 마드는것과 같이 파트를 내부에 포함할 수 있다고 한다.


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

요즘에 대용량의 파일을 다운받다가 커넥션이 끊어지면 처음부터 다시 다운로드를 받아야하는 문제점이 있었다.이러한 문제를 해결하기 위해서 일반적인 리줌(resume)이라는 기능이 필요하게 되었다. 이 기능을 실현하기 위해서는 엔티티의 범위를 지정해서 다운로드 할 필요가 있다. 이와 같은 범위를 지정하여 리퀘스를 하는것을 레인지 리퀘스트라고 한다. 레인지 리퀘스트를 사용하면 10000바이트 정도 크기의 리소스에서 5001~10000 바이트의 범위(바이트 레인지)만을 리퀘스트 할 수 있다.

레인지 리퀘스트에 대한 리스폰스는 상태 코드 206 Partuak Content 라는 리스폰스메세지가 되돌아오고 또한 복수 범위의 레인지 리퀘스트에 대한 리스폰스는 mutipart/byreranges로 리스폰스가 되돌아온다 . 서버가 레인지 리퀘스트에 지원하지 않는 경우에는 상태 코드 206 OK 라는 리스폰스 메세지로 완전한 엔티티가 돌아온다.


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


콘텐츠 네고시에이션이란, 예를 들어 내용은 같지만 영어판과 한국어판과 같이 표시되는 언어가 서로 다른 웹페이지의 경우 서로 다른 언어를 주고 받는 브라우저가 같은 URL에 엑세스 할 때 한국어판 웹 페이지를 표시하도록 하는 구조를 콘텐츠 네고시에이션(Content Negotiation)이라고 한다.


🛠 <콘텐츠 네고시에션의 종류>


  • 서버 구동형 네고시에이션(Sercer-driven Negotiation)

    서버 측에서 콘텐츠 네고시에이션을 하는 방식이다. 서버 측에서 리퀘스트 헤더 필드의 정보를 참조해서 자동적으로 처리를 한다. 단지 브라우저가 보내는 정보를 근거로 하기 때문에 유저에게 정말로 적절한 것이 선택되었다고 할 수는 없다.

  • 에이전트 구동형 네고시에이션(Agent-driven Negotioation)

    클라이언트 측에서 콘텐츠 네고시에션을 하는 방식이다. 브라우저에 표시된 선택지 중에서 유저가 수동으로 선택한다.
    Javascript 등을 사용해서 웹 페이지에서 자동적으로 이것을 정하는 것도 있다.

  • 트랜스페어런트 네고시에이션(Transparent Negotioation)

    서버 구동형과 에이전트 구동형을 혼합한것으로 서버와 클라이언트가 가각 콘테츠 네고시에이션을 하는 방식이다.

<Content Negotiation에 대한 자세한 이야기는 여기 링크 참조>

📚 관련 서적

그림으로 배우는 HTTP&Network

profile
후회없이 도전적이고, 나의 선택을 믿는 자신이 되자!!!

0개의 댓글