2014-11-01 38 views
0

有從JavaScript請求web資源的特定部分(如第100個字節)異步的方式?請求的Web資源的特定部分異步

我會認爲這可能是通過XmlHttpRequest通過設置Range插頭來實現。但是,如果服務器應用的內容編碼(其中大多數都默認情況下),字節範圍將適用於編碼數據,而不是原來的。每HTTP/1.1

當實體體被包括一個消息時,該 體的數據類型通過報頭字段的內容類型和內容 - 編碼確定。這些定義的兩層,編碼有序模型:

entity-body := Content-Encoding(Content-Type(data))

在HTTP字節範圍規範適用於字節的序列中 實體主體[...]。

這使得檢索到的內容無用,因爲如果不檢索(並連接)編碼資源的其餘部分就無法對其進行解碼。

顯然不可能從客戶端禁用內容編碼,因爲XMLHttpRequestprohibitsAccept-Encoding被更改。

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { /* ... */ }; 
xhr.open("GET", url, true); 
xhr.setRequestHeader("Range", "bytes=0-99"); 
xhr.setRequestHeader("Accept-Encoding", "identity"); // not allowed 
xhr.send(); 

是否有另一種方法實現這一點(假設內容編碼不能在服務器上禁用)?

回答

1

你可以嘗試使用模擬AJAX行爲就像裝載與你提到的(也可能是編碼頭將被允許)所有頭隱藏的iframe,並從這些隱藏的iframe中獲取數據的舊式技術。以下是使用隱藏的iframe上傳多部分數據的示例:example。您可以根據自己的需求進行更改。也許它會有所幫助。

+0

感謝您的回答!我將調查它是否可以發出'Accept-Encoding:identity'標題並回傳。 – Douglas 2014-11-04 22:18:01