2016-04-07 32 views
-1

當圖像從客戶端的機器上傳到客戶端(瀏覽器)時,它需要在HTML中使用​​API,此後圖像的base64 encoded url(比如說)將以塊到服務器,它需要重新組裝。所有這些都由開發人員照顧。

技術查詢 - 圖像從服務器到瀏覽器的HTML傳輸

但是,當圖像從服務器發送到客戶機時,服務器機器內只有directory path of the image就足夠了,不需要分塊和編碼。

我的問題是:
1.服務器是否將塊圖像發送到html文件。如果沒有,如何發送完整的圖像不是瓶服務器的網絡?大視頻文件會發生什麼情況?
2.以什麼樣的二進制數據形式發送到客戶端的圖像 - base64url/ArrayBuffer/binarystring/text/etc.
3.如果服務器確實發送了圖像塊,那麼誰在進行分塊並在客戶機上重新組裝?

謝謝。

回答

1

HTML在這裏並不重要。你關心的是使用的傳輸協議 - 最有可能的是HTTP和TCP。

默認情況下,HTTP不是分塊的,儘管有高級頭文件允許這樣做 - 這些頭文件主要用於支持在大文件(例如PDF,視頻)中搜索。從技術上講,這不是真正的組塊 - 它只是允許部分下載的基礎設施(即「將數據從字節1024提供給字節2048」)。

TCP是基於流的協議。從程序員的角度來看,這就是它 - 沒有塊。但從技術上講,它將處理您的輸入數據並將其作爲不同的數據包發送,而這些數據包將在另一端按順序重新組合。這是一個實用性問題 - 它允許您管理數據延遲,數據流,數據包重新傳輸等。TCP在連接協商期間處理細節 - 流量控制,窗口大小調整,擁塞控制...

這不是它的結尾,但是。所有其他層添加他們自己的位 - 他們自己的方式來打包有效負載並根據需要分割它們,他們自己的方式來處理路由和過濾,他們自己的方式來處理擁塞......

最後,就像本地HTTP支持下載,它也支持上傳數據。只需發送一個HTTP請求(通常是POST或PUT)並以服務器可以理解的格式(從text-base-64到原始二進制數據)寫入數據。你的情況的限制因素不是服務器,瀏覽器或HTTP--它是JavaScript。基本的機制仍然是一樣的 - 一個請求,然後是響應。

現在,爲了解決您的問題:

  1. 服務器不發送圖像到HTML文件。 HTML只包含圖像的URL [1],當瀏覽器在img標籤中看到一個URL時,它將爲圖像數據啓動一個新的單獨請求。它與從鏈接下載文件並沒有根本的不同。至於傳輸本身,它跟原始HTML文檔幾乎完全相同 - HTTP標頭,然後是有效載荷。
  2. 通常情況下,原始二進制數據。 HTTP是基於文本的協議,但它的有效載荷可以是任意的。使用Base-64傳輸圖像數據幾乎沒有什麼理由(儘管在過去,已經有HTTP和FTP服務器根本不支持二進制,所以你必須使用類似Base-64的東西)。
  3. HTTP服務器不關心(除了上面提到的「部分下載」)。底層網絡協議處理這個問題。

[1]目前,有方法,直接在HTML文本中嵌入圖像,但它取決於圖像大小,緩存要求等

+0

哇,那是一個非常酷的解釋變化的實用性! – Yaan

相關問題