许多站点,比如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协议来上传的,所以他们大都会要求文件符合一定的大小。

FTP与HTTP上传文件的对比的更多相关文章

  1. FTP主动模式上传文件时返回"ftp: accept: Resource temporarily unavailable"

    FTP主动模式上传文件时返回 Passive mode off ftp: accept: Resource temporarily unavailable 这个问题要从ftp的2种模式说起 PORT ...

  2. ftp配置 Laravel上传文件到ftp服务器

    listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask= dirmessage_enable=YES ...

  3. java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器

    首先需要用到jsch-0.1.54.jar 包: 链接: https://pan.baidu.com/s/1kZR6MqwpCYht9Pp_D6NKQw 密码: gywx 直接上代码: package ...

  4. Ftp客户端(上传文件)

    #coding=utf-8 import os import socket import hashlib import json # client = socket.socket() #申明socke ...

  5. FTP FtpWebRequest 异步上传文件

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  6. ftp服务器不能上传文件故障

    1.在客户端lftp命令无法put文件 原因:登陆用户无法读写 ftp服务器的文件夹,在服务器上增加权限  chmod 777  即可 还有一种方法:在 vsftp的配置文件里,设置可匿名读写

  7. ftp免交互上传文件脚本

    ftp -i -n <<! open .x.x.x user yourFtpAccount yourPasswd cd /root/DailyBuild/webapps/ delete x ...

  8. 通过Ftp put命令上传导致文件损坏的解决办法

    通过Linux命令行向在一台Windows FTP服务器上传文件.然后在另一台Windows客户机登录FTP服务器下载,但是下载后的文件大小变了,exe文件错误了不能正确执行.刻意打包的文件(.rar ...

  9. C#使用FtpWebRequest上传文件

    System.Net命名空间下的FtpWebRequest类实现了ftp协议的.Net实现. FtpWebRequest.KeepAlive指定在请求完成后服务器是否要马上关闭连接 FtpWebReq ...

随机推荐

  1. U盘改造计划之PE、kali、U盘三合一

    最强U盘攻略之一 前一段时间朋友买电脑问了我一些问题,我突然发现U盘怎么这么便宜,128G金士顿,140?!!!我16年买的可是240啊.买贵一百块,我好方啊.但是我的U盘,我是不会屈服做一个普通的U ...

  2. java之单元测试

    这篇主要简单讲下java的单元测试 目录结构如下: 如图,其中1是需要被测试的功能:2是测试模块:3是单元测试需要的引入包: 1. 功能模块1中 Calculator 的代码: package cn. ...

  3. 查看font字体文件

    url: http://bluejamesbond.github.io/CharacterMap/ 打开网址后,如下图操作

  4. SQL递归获取树型路径中文名称

    项目中遇到一个树型结构表要根据任意传入节点获取它从根节点一直到自身节点的全部路径的中文名称,并且用'>'与分隔. 我使用在sqlServer中写了一个解析函数方便开发调用. USE [RP_ER ...

  5. ASP.NET 一般处理程序 接收文件上传

    public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain&qu ...

  6. 【转载】 C#中List集合使用InsertRange方法在指定的位置插入另一个list集合

    在C#的List集合操作过程中,如果在集合中的某个位置插入一个新的元素对象,可以使用Insert方法进行操作.其实List集合也提供了在特定的位置插入另一个集合,然后另一个集合的数据整个写入到当前集合 ...

  7. excel合并日期和时间(转载)

    https://jingyan.baidu.com/article/d3b74d641669361f77e60914.html =TEXT(A2,"YYYY/M/D")&& ...

  8. LAMP环境搭建之编译安装指南(php-5.3.27.tar.gz)

    测试环境:CentOS release 6.5 (Final) 软件安装:httpd-2.2.27.tar.gz   mysql-5.1.72.tar.gz   php-5.3.27.tar.gz 1 ...

  9. 3.kafka 基本配置

    1.主题管理 kafka-topics.sh工具脚本用于对主题操作,如创建.删除.修改.分区数.副本数及主题级别的配置. 1.1创建名为kafka-test主题,有2个副本,3个分区 [hadoop@ ...

  10. WinServer-开关机日志

    开关机日志正常1074, 6006, 13, 12, 6005,41,60081074 记录某用户在某计划下重启6006 日志服务关闭13 OS关闭时间按12 OS启动时间6005 日志服务开启 异常 ...