2013-08-19 17 views
9

Podczas pisania mojego serwera HTTP/1.1 utknąłem z żądaniem wielu zakresów.Odpowiedź HTTP/1.1 na wiele zakresów

Sekcja 14.35.1 dokumentu RFC 2616 zawiera przykłady, ale nie wyjaśnia zachowania serwera. Na przykład:

GET /some/resource HTTP/1.1 
... 
Range: bytes=200-400,100-300,500-600 
... 

powinienem wrócić dokładnie ten sekwencję bajtów? Czy powinienem scalić wszystkie zakresy, wysyłając 100-400,500-600? Lub wysyłania wszystkich pomiędzy, 100-600?

Najgorszy wynik przy sprawdzaniu nagłówka odpowiedzi Content-Range (sekcja 14.16) może zwrócić tylko jeden zakres, więc zastanawiam się, w jaki sposób odpowiedź serwera na przykład w sekcji 14.35.1 bytes=0-0,-1 !!!

W jaki sposób mój serwer powinien obsługiwać takie żądania?

Odpowiedz

11

miałem tylko przyjrzeć się, jak inne serwery, które obsługują pola Range nagłówka może reagować i zrobił szybkie curl do example.com:

~# curl -s -D - -H "Range: bytes=100-200, 300-400" http://www.example.com 
HTTP/1.1 206 Partial Content 
Accept-Ranges: bytes 
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 
Content-Length: 385 
Server: ECS (fll/0761) 


--3d6b6a416f9b5 
Content-Type: text/html 
Content-Range: bytes 100-200/1270 

eta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <meta name="vieport" content 
--3d6b6a416f9b5 
Content-Type: text/html 
Content-Range: bytes 300-400/1270 

-color: #f0f0f2; 
     margin: 0; 
     padding: 0; 
     font-family: "Open Sans", "Helvetica 
--3d6b6a416f9b5-- 

widocznie, co szukasz jest nagłówek Content-Type: multipart/byteranges; boundary odpowiedź. Googlowania dokładnie, że pojawił się a W3C document with appendices to RFC 2616

Gdy HTTP 206 (Partial Content) Komunikat odpowiedzi zawiera treść wielu zakresów (na odpowiedź na wniosek o wielu niewyspecjalizowanych nakładających zakresów), są one przesyłane jako wieloczęściowy ciało wiadomości. Typ mediów do tego celu nazywa się "multipart/byteranges".
Typ nośnika multipart/byteranges zawiera dwie lub więcej części, z których każda ma własne pola Content-Type i Content-Range. Wymagany parametr granicy określa łańcuch graniczny używany do rozdzielania każdej części ciała.

Więc proszę bardzo.

Nawiasem mówiąc, serwer w example.com nie sprawdza pokrywających się zakresów bajtów i wyśle ​​cię dokładnie zakresy że postulowane ...

+0

Trafisz punkt! Przyznaję, że nie próbowałem tego, ponieważ obawiałem się, że może to spowodować pewne zachowanie serwera, a nie dowolny standard. Dziękuję Ci! –

Powiązane problemy