Apakah mungkin untuk menunjukkan kepada saya contoh sesi http dengan permintaan jangkauan. Maksud saya, apa yang akan menjadi header permintaan dan tanggapan?
Beberapa bulan yang lalu versi baru dari standar HTTP / 1.1 diterbitkan. Ini memiliki RFC khusus untuk permintaan rentang, ini jauh lebih mudah dibaca daripada spesifikasi lama, termasuk contoh untuk banyak item: tools.ietf.org/html/rfc7233
Thirler
Jawaban:
136
Pertukaran berikut adalah antara Chrome dan server web statis, mengambil video MP4.
Permintaan awal - untuk video tersebut. Perhatikan Accept-Rangesheader respons untuk menunjukkan bahwa server memiliki dukungan header rentang:
Header rentang dalam respons sebelumnya terdeteksi - permintaan berikutnya dengan rentang terbuka untuk mengonfirmasi dukungan. Respons mengembalikan status 206 dan Content-Rangeheader untuk menunjukkan byte yang ada dalam isi respons:
Apakah header Transfer-Encoding kosong merupakan artefak dari cara komunikasi HTTP ditangkap atau adakah server HTTP nyata di luar sana yang menghasilkan nilai kosong untuk header ini?
swl10
7
Dalam kasus pertama, sepertinya server mengembalikan 64657027 byte konten. Jadi apa yang terjadi - apakah klien hanya membuang konten itu, dan kemudian mengeluarkan permintaan rentang untuk bagian yang benar-benar diinginkan? Atau server tidak mengembalikan konten apa pun karena sesuatu dalam pesan klien mengatakan jangan lakukan itu. Jika ya, apakah itu?
Morrie
3
@Morrie - sepertinya server, mengetahui bahwa dirinya mendukung permintaan jangkauan, memberi tahu klien "Saya menerima permintaan rentang" melalui Accept-Ranges: bytesheader, tetapi juga mengirimkan panjang konten untuk sumber daya sehingga klien dapat membuat permintaan rentang dengan bagian atas terikat. Tidak ada dalam pesan klien yang mengatakan melakukan ini sejauh yang saya tahu - server dapat memilih untuk menanggapi dengan "di sini adalah seluruh sumber daya" atau "Saya menerima permintaan rentang" - yang sekali lagi adalah keberadaan Accept-Rangesheader. Itu adalah pemahaman saya tentang itu.
Simon Whitehead
4
Tetapi bukankah Panjang Konten 64657027 dalam respons pertama berarti bahwa sebenarnya ada banyak byte muatan setelah tajuk, yang harus dikonsumsi klien karena koneksinya adalah Keep-Alive? Saya bertanya-tanya dalam pesan tanggapan itu apa yang mengatakan bahwa sebenarnya tidak ada muatan apa pun.
Morrie
1
@Morrie Keep-hidup adalah permintaan dari klien dan klien tidak memiliki kewajiban untuk tetap menggunakan koneksi tersebut. Saya baru saja menyimpulkan dalam pekerjaan saya sendiri bahwa, setidaknya untuk chrome, permintaan GET pertama dengan rentang "0-" segera dibatalkan segera setelah header diterima, alih-alih menggunakan permintaan HEAD. Saya percaya bahwa ini adalah cara untuk menghindari masalah dengan server mana pun yang mungkin tidak menerapkan kata kerja HEAD dengan benar.
Jawaban:
Pertukaran berikut adalah antara Chrome dan server web statis, mengambil video MP4.
Permintaan awal - untuk video tersebut. Perhatikan
Accept-Ranges
header respons untuk menunjukkan bahwa server memiliki dukungan header rentang:Header rentang dalam respons sebelumnya terdeteksi - permintaan berikutnya dengan rentang terbuka untuk mengonfirmasi dukungan. Respons mengembalikan status 206 dan
Content-Range
header untuk menunjukkan byte yang ada dalam isi respons:Permintaan rentang selanjutnya untuk merekam akhir file (mungkin untuk menangkap metadata tambahan):
Pengguna mengklik di bilah kemajuan video di luar rentang yang diunduh - permintaan rentang dikeluarkan untuk mulai memutar dari posisi yang dipilih:
sumber
Accept-Ranges: bytes
header, tetapi juga mengirimkan panjang konten untuk sumber daya sehingga klien dapat membuat permintaan rentang dengan bagian atas terikat. Tidak ada dalam pesan klien yang mengatakan melakukan ini sejauh yang saya tahu - server dapat memilih untuk menanggapi dengan "di sini adalah seluruh sumber daya" atau "Saya menerima permintaan rentang" - yang sekali lagi adalah keberadaanAccept-Ranges
header. Itu adalah pemahaman saya tentang itu.