许多站点,比如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. IP核——FIFO

    一.Quartus 1.打开Quartus ii,点击Tools---MegaWizard Plug-In Manager 2.弹出创建页面,选择Creat a new custom megafunc ...

  2. H5新特性 本地存储---cookie localStorage sessionStorage

    本地存储的作用 :避免登录网站时,用户在页面浏览时重复登录,也可以实现快速登录,一段时间内保存用户的登录效果,提高页面访问速率 在html5中提供三种数据持久化操作的方法: 1.cookie 可看作是 ...

  3. java接口幂等性校验

    关于接口幂等性的概念: 幂等性:同一接口调用多次(使用相同的参数),对系统的影响是相同的. 怎样才是对系统有影响? 有影响--->增删改操作,修改一个用户信息,删除用户与某人的关联关系,生成一个 ...

  4. ssh远程连接一段时间会失效的问题

    话不多讲,先说明我的环境和远程环境. 本地环境:Ubuntu18.04(client) 远程环境:Ubuntu16.04(server) 我的一个小项目部署在百度云的Ubuntu服务器上,需要经常使用 ...

  5. 从create-react-app开始,构建项目架构

    1.生成项目 命令行执行:create-react-app  myapp,生成如下结构: 2.安装sass依赖,让你在项目中可以使用scss模块化,index.module.scss: npm i n ...

  6. python 协程池和pool.map用法

    一.问题描述 现在有一段代码,需要扫描一个网段内的ip地址,是否可以ping通. 执行起来效率太慢,需要使用协程. #!/usr/bin/env python # -*- coding: utf-8 ...

  7. go语言学习 ---struct 对象的序列化和反序列化(xml)

    实例1: //main package main import ( "encoding/xml" "fmt" ) type person struct { Na ...

  8. Unity的学习笔记(鼠标移动控制视角移动)

    using UnityEngine; public class MouseLook : MonoBehaviour { , MouseX = , MouseY = } //定义一个枚举,移动xy,或者 ...

  9. dicker第三章--网络管理

  10. Android笔记(四十二) Android中的数据存储——SQLite(四)update

    update方法的四个参数: update()方法参数 对应的sql部分 描述 table update table_name 更新的表名 values set column=xxx ContentV ...