ตัวอย่างเซสชันคำขอช่วง http


91

เป็นไปได้ไหมที่จะแสดงเซสชัน http ตัวอย่างพร้อมคำขอช่วง ฉันหมายถึงส่วนหัวของคำขอและคำตอบคืออะไร


2
ไม่กี่เดือนที่ผ่านมามีการเผยแพร่มาตรฐาน HTTP / 1.1 เวอร์ชันใหม่ มี RFC พิเศษสำหรับการร้องขอช่วงซึ่งสามารถอ่านได้มากกว่าข้อมูลจำเพาะแบบเก่ารวมถึงตัวอย่างสำหรับหลายรายการ: tools.ietf.org/html/rfc7233
Thirler

คำตอบ:


137

การแลกเปลี่ยนต่อไปนี้อยู่ระหว่าง Chrome และเว็บเซิร์ฟเวอร์แบบคงที่โดยเรียกดูวิดีโอ MP4

คำขอเริ่มต้น - สำหรับวิดีโอ หมายเหตุAccept-Rangesส่วนหัวการตอบกลับเพื่อระบุว่าเซิร์ฟเวอร์รองรับส่วนหัวของช่วง:

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

ตรวจพบส่วนหัวของช่วงในการตอบกลับก่อนหน้า - คำขอที่ตามมาพร้อมช่วงปลายเปิดเพื่อยืนยันการสนับสนุน การตอบกลับส่งคืนสถานะ 206 และContent-Rangeส่วนหัวเพื่อระบุไบต์ที่มีอยู่ในเนื้อหาการตอบสนอง:

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

การร้องขอช่วงที่ตามมาเพื่อบันทึกจุดสิ้นสุดของไฟล์ (อาจเพื่อจับข้อมูลเมตาต่อท้าย):

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

ผู้ใช้คลิกในแถบความคืบหน้าของวิดีโอนอกเหนือจากช่วงที่ดาวน์โหลด - มีการร้องขอช่วงเพื่อเริ่มเล่นจากตำแหน่งที่เลือก:

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
ส่วนหัว Transfer-Encoding ที่ว่างเปล่าเป็นสิ่งประดิษฐ์ของวิธีการสื่อสาร HTTP หรือมีเซิร์ฟเวอร์ HTTP จริงที่สร้างค่าว่างสำหรับส่วนหัวนี้หรือไม่
swl10

7
ในกรณีแรกดูเหมือนว่าเซิร์ฟเวอร์จะส่งคืนเนื้อหา 64657027 ไบต์ แล้วเกิดอะไรขึ้น - ลูกค้าเพิ่งทิ้งเนื้อหานั้นไปแล้วจึงออกคำขอช่วงสำหรับชิ้นส่วนที่ต้องการจริงๆหรือ หรือเซิร์ฟเวอร์ไม่ส่งคืนเนื้อหาใด ๆ เนื่องจากมีบางอย่างในข้อความของลูกค้าระบุว่าอย่าทำเช่นนั้น ถ้าเป็นเช่นนั้นมันคืออะไร?
Morrie

3
@Morrie - ดูเหมือนว่าเซิร์ฟเวอร์รู้ว่าตัวเองรองรับคำขอช่วงบอกลูกค้าว่า "ฉันยอมรับคำขอช่วง" ผ่านAccept-Ranges: bytesส่วนหัว แต่ยังส่งความยาวของเนื้อหาสำหรับทรัพยากรลงเพื่อให้ไคลเอ็นต์สามารถร้องขอช่วงด้วยส่วนบน ผูกพัน. ไม่มีสิ่งใดในข้อความไคลเอ็นต์ที่ระบุว่าให้ทำสิ่งนี้เท่าที่ฉันทราบ - เซิร์ฟเวอร์สามารถเลือกที่จะตอบสนองด้วย "ที่นี่คือทรัพยากรทั้งหมด" หรือ "ฉันยอมรับคำขอช่วง" ซึ่งเป็นการมีอยู่ของAccept-Rangesส่วนหัวอีกครั้ง นั่นคือความเข้าใจของฉันต่อไป
Simon Whitehead

4
แต่ความยาวของเนื้อหา 64657027 ในการตอบกลับครั้งแรกไม่ได้หมายความว่ามีน้ำหนักบรรทุกจำนวนมากตามส่วนหัวซึ่งไคลเอ็นต์ต้องใช้เนื่องจากการเชื่อมต่อเป็นแบบ Keep-Alive หรือไม่ ฉันสงสัยว่าข้อความตอบกลับนั้นบอกว่าไม่มีน้ำหนักบรรทุกจริงๆ
Morrie

1
@Morrie Keep-alive เป็นคำขอจากลูกค้าและลูกค้าไม่มีภาระผูกพันใด ๆ ในการใช้การเชื่อมต่อต่อไป ฉันเพิ่งสรุปในงานของตัวเองว่าอย่างน้อยสำหรับ Chrome คำขอ GET แรกที่มีช่วง "0-" จะถูกยกเลิกทันทีทันทีที่ได้รับส่วนหัวแทนที่จะใช้คำขอ HEAD ฉันเชื่อว่าเป็นวิธีหลีกเลี่ยงปัญหากับเซิร์ฟเวอร์ใด ๆ ที่อาจใช้คำกริยา HEAD ไม่ถูกต้อง
Zoomulator
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.