Örnek http aralığı istek oturumu


91

Aralık istekleriyle örnek bir http oturumu göstermek mümkün mü? Demek istediğim, istek ve yanıt başlıkları ne olurdu?


2
Birkaç ay önce, HTTP / 1.1 standardının yeni sürümü yayınlandı. Aralık istekleri için özel bir RFC'ye sahiptir, bu, birçok öğe için örnekler de dahil olmak üzere eski spesifikasyondan çok daha okunabilirdir: tools.ietf.org/html/rfc7233
Thirler

Yanıtlar:


137

Aşağıdaki değişim, bir MP4 videosunun alınmasıyla Chrome ile statik bir web sunucusu arasındadır.

İlk istek - video için. Accept-RangesSunucunun aralık başlığı desteğine sahip olduğunu belirtmek için yanıt başlığına dikkat edin:

GET /BigBuckBunny_320x180.mp4
        Cache-Control: max-age=0
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range:
        Accept: text/html,application/xhtml+xml,application/xml,*/*
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Accept-Encoding: gzip,deflate,sdch
        Accept-Charset: ISO-8859-1,utf-8,*
200 OK
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 64657027
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:24 GMT

Önceki yanıttaki aralık başlığı algılandı - desteği onaylamak için açık uçlu aralıkla sonraki istek. Yanıt Content-Range, yanıt gövdesinde bulunan baytları belirtmek için 206 durumu ve başlığı döndürür :

GET /BigBuckBunny_320x180.mp4
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range: bytes=0-
        Accept: */*
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Referer: http://localhost:8080/BigBuckBunny_320x180.mp4
        Accept-Encoding: identity
        Accept-Charset: ISO-8859-1,utf-8,*
206 Partial Content
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 64657027
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:25 GMT
        Content-Range: bytes 0-64657026/64657027

Dosyanın sonunu yakalamak için sonraki aralık isteği (muhtemelen sondaki meta verileri yakalamak için):

GET /BigBuckBunny_320x180.mp4
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range: bytes=64312833-64657026
        Accept: */*
        If-Range: A023EF02BD589BC472A2D6774EAE3C58
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Referer: http://localhost:8080/BigBuckBunny_320x180.mp4
        Accept-Encoding: identity
        Accept-Charset: ISO-8859-1,utf-8,*
206 Partial Content
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 344194
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:25 GMT
        Content-Range: bytes 64312833-64657026/64657027

Kullanıcı, indirilen aralığın ötesinde video ilerleme çubuğunu tıklar - seçilen konumdan oynatmaya başlamak için bir aralık isteği gönderilir:

GET /BigBuckBunny_320x180.mp4
        Connection: keep-alive
        Accept-Language: en-GB,en-US,en
        Host: localhost:8080
        Range: bytes=1073152-64313343
        Accept: */*
        If-Range: A023EF02BD589BC472A2D6774EAE3C58
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ...
        Referer: http://localhost:8080/BigBuckBunny_320x180.mp4
        Accept-Encoding: identity
        Accept-Charset: ISO-8859-1,utf-8,*
206 Partial Content
        Content-Type: video/mp4
        Connection: keep-alive
        Last-Modified: Wed,14 Dec 2011 15:50:59 GMT
        ETag: A023EF02BD589BC472A2D6774EAE3C58
        Transfer-Encoding:
        Content-Length: 63240192
        Accept-Ranges: bytes
        Server: Brisket/1.0.1
        Date: Wed,14 Dec 2011 16:11:25 GMT
        Content-Range: bytes 1073152-64313343/64657027

7
Boş Transfer-Encoding başlığı, HTTP iletişiminin yakalanma biçiminin bir ürünü mü yoksa bu başlık için boş değerler üreten gerçek bir HTTP sunucusu var mı?
swl10

7
İlk durumda, sunucu 64657027 bayt içerik döndürüyor gibi görünüyor. Öyleyse ne oluyor - müşteri sadece bu içeriği çöpe atıyor ve ardından gerçekten istediği parçalar için bir menzil talebi mi yayınlıyor? Veya sunucunun herhangi bir içerik döndürmemesi, istemcinin mesajında ​​bunu yapma diyor bir şey yüzünden mi? Varsa nedir?
Morrie

3
@Morrie - sunucuya benziyor, aralık isteklerini desteklediğini bilerek, istemciye Accept-Ranges: bytesbaşlık aracılığıyla "aralık isteklerini kabul ediyorum" diyor , ancak aynı zamanda kaynak için içerik uzunluğunu da gönderiyor, böylece müşteri bir üst ciltli. İstemci mesajındaki hiçbir şey, bildiğim kadarıyla bunu yapmamayı söylemiyor - sunucu, "kaynağın tamamı burada" veya "Aralık isteklerini kabul ediyorum" şeklinde yanıt vermeyi seçebilir - ki bu da yine Accept-Rangesbaşlığın varlığıdır . Zaten benim anladığım bu.
Simon Whitehead

4
Ancak, ilk yanıttaki 64657027 İçerik Uzunluğu, aslında başlığı takip eden, bağlantı Keep-Alive olduğu için istemcinin tüketmesi gereken o kadar çok bayt yük olduğu anlamına gelmez mi? Bu yanıt mesajında ​​aslında herhangi bir yük olmadığını söylediğini merak ediyorum.
Morrie

1
@Morrie Canlı Tut, müşteriden gelen bir taleptir ve müşterinin bağlantıyı kullanmaya devam etme yükümlülüğü yoktur. Kendi çalışmamda, en azından Chrome için, "0-" aralığına sahip ilk GET isteğinin, bir HEAD isteği kullanmak yerine başlık alınır alınmaz derhal iptal edildiği sonucuna vardım. HEAD fiilini doğru şekilde uygulamayan herhangi bir sunucuda sorunlardan kaçınmanın bir yolu olduğuna inanıyorum.
Zoomulator
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.