2013-08-19 31 views
9

Khi viết máy chủ HTTP/1.1, tôi gặp khó khăn trong việc xử lý nhiều yêu cầu phạm vi.Phản hồi HTTP/1.1 với nhiều phạm vi

Mục 14.35.1 của RFC 2616 đề cập một số ví dụ nhưng không làm rõ hành vi của máy chủ. Ví dụ:

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

Tôi có nên trả về chuỗi byte chính xác này không? Hoặc tôi có nên hợp nhất tất cả các phạm vi, gửi 100-400,500-600 không? Hoặc gửi tất cả ở giữa, 100-600?

Tồi tệ nhất, khi kiểm tra Content-Range tiêu đề phản hồi (Mục 14.16), chỉ có một phạm vi có thể được trả lại, vì vậy tôi tự hỏi làm thế nào một máy chủ sẽ phản hồi ví dụ trong Phần 14.35.1 bytes=0-0,-1 !!!

Máy chủ của tôi xử lý các yêu cầu như thế nào?

Trả lời

11

Tôi chỉ có một cái nhìn tại các máy chủ như thế nào khác có hỗ trợ lĩnh vực Range tiêu đề có thể đáp ứng và làm một cách nhanh chóng curl-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-- 

Rõ ràng, những gì bạn đang tìm kiếm là tiêu đề Content-Type: multipart/byteranges; boundary phản ứng. Googling chính xác điều đó bật lên a W3C document with appendices to RFC 2616

Khi một HTTP 206 (Nội dung từng phần) thông báo trả lời bao gồm các nội dung của nhiều phạm vi (một phản ứng với một yêu cầu cho nhiều không chồng chéo dãy), đây là những truyền như một nhiều phần dữ liệu nội dung thư. Loại phương tiện cho mục đích này được gọi là "multipart/byteranges".
Loại phương tiện multipart/byteranges bao gồm hai hoặc nhiều phần, mỗi loại có các trường Content-TypeContent-Range riêng. Tham số biên yêu cầu xác định chuỗi ranh giới được sử dụng để phân tách từng phần thân.

Vì vậy, ở đó bạn đi.

Bằng cách này, các máy chủ tại example.com không kiểm tra chồng chéo dãy byte và gửi cho bạn một cách chính xác các dãy mà bạn yêu cầu ...

+0

Bạn nhấn điểm! Tôi thú nhận tôi đã không thử nó bởi vì tôi sợ rằng nó có thể dẫn đến một số hành vi máy chủ cụ thể, và không phải bất kỳ tiêu chuẩn. Cảm ơn bạn! –

Các vấn đề liên quan