許多站點,好比facebook或一些博客等都容許用戶上傳或下載文件,好比論壇或博客系統的圖片。java
在這種狀況下,一般有兩種選擇上傳文件到服務器,那就是FTP協議和HTTP協議。web
如下列出了一些二者的不一樣點:算法
一、HTTP協議是用來瀏覽網站的,而FTP是用來訪問和傳輸文件的,FTP文件傳輸有點批量上傳和維護網站的意思,而HTTP文件傳輸更多的是爲終端用戶提供文件傳輸,好比電影、圖片、音樂之類。編程
二、HTTP 和 FTP 客戶端:一般的HTTP客戶端就是瀏覽器,而FTP服務能夠經過命令行或者用戶自有的圖形界面客戶端。瀏覽器
三、HTTP 頭:HTTP 頭包含了 metadata ,好比說最後更改的日期、編碼方式、服務器名稱版本還有其餘的一些信息,而這些在FTP中是不存在的。安全
四、FTP要比HTTP早出現10年左右。服務器
五、數據格式:FTP能傳輸ACSII數據或者二進制格式的數據,而HTTP只用二進制格式。網站
六、HTTP中的流水線:HTTP支持流水線,這就意味着客戶端能夠在上一個請求處理完以前,發出下一個請求,其結果就是屢次請求數據以前省掉了部分服務器客戶端往返時延。而FTP並無這項支持。編碼
七、HTTP中的動態端口:FTP一個最大的問題就是它使用兩個鏈接,第一個鏈接用來發送控制指令,當接受或者發送數據的時候,又打開第二個TCP鏈接。而HTTP在雙向傳輸中使用動態端口。spa
八、HTTP中的持久鏈接:對一個HTTP會話來說,客戶端能夠維護一個單個的鏈接並使用它進行任意數量的數據傳輸。FTP每次有數據的須要時都建立一個新的鏈接。重複的建立新的鏈接帶來的體驗並很差,由於每次建立鏈接都必須讓雙方握手驗證,這消耗了不少時間。
九、HTTP中的壓縮算法:HTTP提供了一個在一些壓縮算法中客戶端和服務器共同協商選擇的辦法。其中gzip能夠說是最有影響力的一種,而FTP中並不存在這種複雜的算法。
十、HTTP支持代理:HTTP一個很大的特色就是支持代理,這種功能是構建在協議裏的,而FTP並不支持。
十一、而FTP也能脫穎而出的一點是這個協議是直接面向文件級別的。這覺得着FTP有例如能夠經過命令列出遠程服務器上的目錄列表,而HTTP沒有這個概念。
十二、速度:可能最一般的問題了:哪個傳輸更快?
什麼使FTP服務更快?
一、沒有在發出的數據中加入meta-data,僅傳輸原二進制文件。
二、沒有過分的分塊編碼
什麼使HTTP服務更快?
一、重用已存在的持久鏈接,從而有更好的TCP表現。
二、流水線的支持使得從同一個服務器上請求多個文件更快。
三、自動的壓縮機制使得傳輸的數據更少。
四、沒有命令/應答機制最大限度的減小了往返時延。
總結:
固然最終的結果會因具體的狀況而異,但我想說的是,單次傳輸一個靜態的文件,很難衡量二者的區別。對單個的小文件來講,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協議來上傳的,因此他們大都會要求文件符合必定的大小。