許多站點,比如facebook或一些博客等都允許用戶上傳或下載文件,比如論壇或博客系統的圖片。
在這種情況下,通常有兩種選擇上傳文件到服務器,那就是FTP協議和HTTP協議。
以下列出了一些兩者的不同點:
1、HTTP協議是用來瀏覽網站的,而FTP是用來訪問和傳輸文件的,FTP文件傳輸有點批量上傳和維護網站的意思,而HTTP文件傳輸更多的是為終端用戶提供文件傳輸,比如電影、圖片、音樂之類。
2、HTTP 和 FTP 客戶端:通常的HTTP客戶端就是瀏覽器,而FTP服務可以通過命令行或者用戶自有的圖形界面客戶端。
3、HTTP 頭:HTTP 頭包含了 metadata ,比如說最后更改的日期、編碼方式、服務器名稱版本還有其他的一些信息,而這些在FTP中是不存在的。
4、FTP要比HTTP早出現10年左右。
5、數據格式:FTP能傳輸ACSII數據或者二進制格式的數據,而HTTP只用二進制格式。
6、HTTP中的流水線:HTTP支持流水線,這就意味着客戶端可以在上一個請求處理完之前,發出下一個請求,其結果就是多次請求數據之前省掉了部分服務器客戶端往返時延。而FTP並沒有這項支持。
7、HTTP中的動態端口:FTP一個最大的問題就是它使用兩個連接,第一個連接用來發送控制指令,當接受或者發送數據的時候,又打開第二個TCP連接。而HTTP在雙向傳輸中使用動態端口。
8、HTTP中的持久連接:對一個HTTP會話來講,客戶端可以維護一個單個的連接並使用它進行任意數量的數據傳輸。FTP每次有數據的需要時都創建一個新的連接。重復的創建新的連接帶來的體驗並不好,因為每次創建連接都必須讓雙方握手驗證,這消耗了很多時間。
9、HTTP中的壓縮算法:HTTP提供了一個在一些壓縮算法中客戶端和服務器共同協商選擇的辦法。其中gzip可以說是最有影響力的一種,而FTP中並不存在這種復雜的算法。
10、HTTP支持代理:HTTP一個很大的特點就是支持代理,這種功能是構建在協議里的,而FTP並不支持。
11、而FTP也能脫穎而出的一點是這個協議是直接面向文件級別的。這以為着FTP有例如可以通過命令列出遠程服務器上的目錄列表,而HTTP沒有這個概念。
12、速度:可能最通常的問題了:哪一個傳輸更快?
什么使FTP服務更快?
1、沒有在發出的數據中加入meta-data,僅傳輸原二進制文件。
2、沒有過度的分塊編碼
什么使HTTP服務更快?
1、重用已存在的持久連接,從而有更好的TCP表現。
2、流水線的支持使得從同一個服務器上請求多個文件更快。
3、自動的壓縮機制使得傳輸的數據更少。
4、沒有命令/應答機制最大限度的減少了往返時延。
總結:
當然最終的結果會因具體的情況而異,但我想說的是,單次傳輸一個靜態的文件,很難衡量兩者的區別。對單個的小文件來說,FTP傳輸更快,當傳輸多個文件時,HTTP更快。
1:用http協議上傳更適合web編程的方便;
傳小於1M文件速度要比用ftp協議上傳文件略快,安全性好。不像ftp那樣,必須要啟動一個ftp服務才行。
http上傳就是通過http協議來向服務器上傳文件,所以服務器端應該有一個處理客戶端請求的頁面。
2:用ftp協議上傳文件大於1M的文件速度比http快;文件越大,上傳的速度就比http上傳快的倍數越大。而且用java編寫程序,ftp比http方便。
上傳大文件:
Ftp有明顯的天生的優勢,不需要將文件全部載入內存中,http在這方面就比較薄落了,當然也有人實現了分塊http上傳,但總體來說http上傳對於大文件不適合,多大算大呢?
在局域網中,個人認為超過了500M的文件就不適合使用http協議來上傳了。
上傳小文件:
非常適合http協議來上傳,因為簡單,而且可以實現更精細的控制,權限控制比ftp要簡單的多。
對於C/S類型的應用程序,如果確定文件比較小,那么可以采用http協議來上傳,如果文件比較大的話,那最好還是采用ftp來上傳吧。
對於B/S類型的應用程序,因為Web應用程序本身上傳的就比較小,目前大部分網站采用的都是http協議來上傳的,所以他們大都會要求文件符合一定的大小。