2012-07-05 30 views
0

當我們右鍵點擊下面的URL並選擇「另存爲」時,IE會採取什麼行動?當我們右鍵單擊URL並在IE中選擇「另存爲」時會發生什麼?

http://www.somesite.com/some_file.zip 

我聽說過類似「HTTP下載」的東西,究竟是什麼?

我的理解是,HTTP是一種基於文本的協議,它如何被用來傳輸不同種類的文件?

我的猜測是,當我們選擇另存爲URL時,IE(或任何其他瀏覽器)將打開一個到服務器的新TCP連接並進行文件傳輸。它應該與HTTP無關。

  • 當我們訪問一個網頁時,瀏覽器使用TCP連接來傳輸HTTP 信息和HTML。
  • 當我們在IE下載文件時,瀏覽器使用TCP傳輸文件內容。

它本質上是一樣的,只是在轉移的東西上有所不同。

對嗎? 連接到傳輸文件內容。

回答

2

您可以通過HTTP傳輸任何二進制數據。例如,服務器可以將Content-Type響應標頭設置爲任何內容,然後將任何數據寫入響應。例如,您可以將Content-Type設置爲application/octet-stream,然後將二進制數據寫入響應。因此,IE所做的是分析Content-Type響應頭,下載內容以及它是否可以顯示的已知內容類型(例如HTML),如果不顯示,則會提示用戶保存。

HTTP不是基於文本的協議。標題應該是文本,但請求/響應的主體可以是任意字節。這就是標題的用途:準確地表明身體是如何編碼的,以便對方能夠正確理解和解碼。

就TCP和HTTP而言,HTTP是TCP上的協議。所以當使用HTTP時,你隱式使用TCP。把它看作是基於TCP的主要傳輸機制的基於約定的協議。 TCP是低級的:它允許客戶端和服務器之間的連接。 HTTP就像一種語言。沒有HTTP,TCP就像來自不同國家的兩個人一樣,每個人講一種不同的語言,在一家酒吧見面。你認爲會發生什麼?他們將無法交換一個詞。 HTTP是聯合它們並允許它們交談的通用語言。 TCP就是這個標準。

+0

生動而令人印象深刻!感謝您的回答。我認爲瀏覽器應該能夠識別它在響應主體中收到的字節的含義/格式。因爲我嘗試過,我使用** Response.WriteFile(「test.png」)來創建響應**,並且我沒有指定任何響應頭,IE仍然能夠識別png格式並正確顯示圖片。它不會提示我下載png文件。 – smwikipedia 2012-07-09 02:39:07

+1

IE是一個特別的野獸。如果沒有Content-Type響應頭,它會使用啓發式方法通過查看前幾個字節並嘗試匹配一些衆所周知的類型來猜測類型。例如,可以通過查看標題來識別所有圖像格式。儘管依賴於它是不好的做法,因爲其他瀏覽器可能無法正確顯示它。 – 2012-07-09 05:55:54

+0

因此,當HTTP響應到達瀏覽器時,響應看起來像一些ASCII格式的HTTP頭,然後是任意字節**。並且IE會猜測像內容類型頭文件這樣的線索,或者只是嘗試在任意字節中查找某種文件格式的幻數。你能指點我一些有關HTTP協議如何與各種瀏覽器真正起作用的參考嗎?也許這是一個過度的要求。如果有的話,我會真的apprecaite。 – smwikipedia 2012-07-09 06:50:48

相關問題