Phiên yêu cầu phạm vi http mẫu


91

Có thể cho tôi xem một phiên http mẫu với các yêu cầu phạm vi không. Ý tôi là tiêu đề yêu cầu và phản hồi sẽ như thế nào?


2
Một vài tháng trước, phiên bản mới của tiêu chuẩn HTTP / 1.1 đã được xuất bản. Nó có một RFC đặc biệt cho các yêu cầu phạm vi, điều này dễ đọc hơn rất nhiều so với thông số cũ, bao gồm các ví dụ cho nhiều mục: tools.ietf.org/html/rfc7233
Thirler 23/02/15

Câu trả lời:


135

Trao đổi sau là giữa Chrome và một máy chủ web tĩnh, lấy một video MP4.

Yêu cầu ban đầu - đối với video. Lưu ý Accept-Rangestiêu đề phản hồi để cho biết máy chủ có hỗ trợ tiêu đề phạm vi:

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

Đã phát hiện tiêu đề phạm vi trong phản hồi trước đó - yêu cầu tiếp theo với phạm vi kết thúc mở để xác nhận hỗ trợ. Phản hồi trả về trạng thái và Content-Rangetiêu đề 206 để chỉ ra các byte có trong nội dung phản hồi:

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

Yêu cầu dải ô tiếp theo để nắm bắt phần cuối của tệp (có thể là để nắm bắt siêu dữ liệu theo sau):

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

Người dùng nhấp vào thanh tiến trình video ngoài phạm vi đã tải xuống - yêu cầu phạm vi được đưa ra để bắt đầu phát từ vị trí đã chọn:

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
Tiêu đề Mã hóa-Chuyển giao trống có phải là một đồ tạo tác của cách thức giao tiếp HTTP được ghi lại hay có một máy chủ HTTP thực nào ở đó tạo ra các giá trị trống cho tiêu đề này không?
swl 10

7
Trong trường hợp đầu tiên, có vẻ như máy chủ đang trả về 64657027 byte nội dung. Vậy điều gì đang xảy ra - có phải khách hàng chỉ vứt bỏ nội dung đó và sau đó đưa ra yêu cầu phạm vi cho các phần thực sự muốn? Hoặc là máy chủ không trả về bất kỳ nội dung nào là do có điều gì đó trong thông báo của máy khách nói rằng đừng làm vậy. Nếu vậy, nó là cái gì?
Morrie

3
@Morrie - có vẻ như máy chủ, biết rằng bản thân nó hỗ trợ các yêu cầu phạm vi, nói với khách hàng "Tôi chấp nhận các yêu cầu phạm vi" thông qua Accept-Ranges: bytestiêu đề, nhưng nó cũng gửi xuống độ dài nội dung cho tài nguyên để khách hàng có thể thực hiện các yêu cầu phạm vi với một ràng buộc. Không có gì trong thông báo máy khách cho biết hãy làm điều này theo như tôi biết - máy chủ có thể chọn trả lời "đây là toàn bộ tài nguyên" hoặc "Tôi chấp nhận yêu cầu phạm vi" - một lần nữa là sự tồn tại của Accept-Rangestiêu đề. Đó là cách hiểu của tôi về nó.
Simon Whitehead

4
Nhưng không phải Độ dài nội dung của 64657027 trong phản hồi đầu tiên có nghĩa là thực sự có nhiều byte trọng tải theo sau tiêu đề, mà khách hàng phải sử dụng vì kết nối là Keep-Alive? Tôi tự hỏi điều gì trong thông báo phản hồi đó nói rằng thực sự không có bất kỳ tải trọng nào.
Morrie

1
@Morrie Keep-live là một yêu cầu từ khách hàng và khách hàng không có bất kỳ nghĩa vụ nào để tiếp tục sử dụng kết nối. Tôi vừa kết luận trong công việc của mình rằng, ít nhất là đối với chrome, yêu cầu GET đầu tiên với dải ô "0-" được hủy bỏ nhanh chóng ngay khi nhận được tiêu đề, thay vì sử dụng yêu cầu HEAD. Tôi tin rằng đó là một cách để tránh các sự cố với bất kỳ máy chủ nào có thể không triển khai chính xác động từ HEAD.
Zoomulator
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.