本文围绕以下三个部分展开:

一、HTTP协议 
二、FTP协议 
三、HTTP与FTP的异同点

一、HTTP协议简介

1. 概念

HTTP: HyperText Transfer Protocal,超文本传输协议。它是Web的核心。

HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行会话。

HTTP定义了这些报文的格式,以及客户机和服务器是如何进行报文交换的,即:Web客户机是如何向Web服务器请求Web页面,以及服务器如何将Web页面传送给客户机。

2. HTTP是一个无状态协议(stateless protocal)

服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息。

假如某个特定的客户机在短短的几秒钟内两次请求同一个对象,服务器并不会因为刚刚为该用户提供了该对象就不再做出反应,而是重新发送该对象,就像该服务器已经完全忘记不久之前所做过的事一样。

正因为一个HTTP服务器并不保存关于客户机的任何信息,所以我们说HTTP是一个无状态协议。

3. 非持久连接(non-persistent connection)和持久连接(persistent connection)

(1)在许多因特网应用中,客户机和服务器进行长时间的通信,其中客户机发出一系列请求,服务器对每个请求进行响应。

根据不同的应用程序以及应用程序使用的方式,这一系列请求,可以周期性地一个接一个地发出,也可以间断性地发出。

当这种客户机/服务器的交互运行于TCP协议之上时,应用程序的研制者需要确定每个请求/响应对,是经一个 单独的TCP连接 发送,还是所有的请求及相应的响应经 相同的TCP连接 发送。

如果每个请求/响应对,都是经一个 单独的TCP连接 发送,该应用程序被称为 使用 非持久连接;如果所有的请求及相应的响应都经 相同的TCP连接 发送,则该应用程序被称为 使用 持久连接。

(2)HTTP既可以使用非持久连接,也可以使用持久连接,默认方式下,HTTP使用持久连接。

(3)非持久连接的缺点:

1)非持久连接必须为每一个请求的对象建立和维护一个全新的连接。 
        对于这样的连接,在客户机和服务器都要分配TCP的缓冲区和变量,这给服务器带来了严重的负担,因为一台Web服务器可能同时服务于数以百计的客户机请求。

2)每一个对象的传输时延为两个RTT(Round-Trip Time,往返时间),即一个RTT用于建立TCP,另一个RTT用于请求和接收一个对象。传输时延太大。

在持久连接的情况下,服务器在发送响应后保持该TCP连接打开。 
        在相同的客户机和服务器之间的后续请求和响应报文,可通过相同的连接进行传送。特别是一个完整的Web页面(如基本的HTML文件,加上10个图形),可以用单个持久的TCP连接进行传送。 
        更有甚者,位于同一台服务器的多个Web页面,在从该服务器发送给同一个客户机时,可以在单个持久的TCP连接上进行。对这些对象的请求可一个接一个地发出,而不必等待未决请求的回答,像流水线一样进行。

一般来说,如果一个连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。

HTTP的默认模式使用了流水线方式的持久连接。

4. HTTP报文格式

HTTP报文有两种:请求报文和响应报文。

(详情以后补充)

二、FTP协议

FTP:File Transfer Protocol,文件传输协议。

在典型的FTP会话中,用户坐在一台主机(本地主机)前面,向一台远程主机上传文件或从远程主机下载文件。

用户通过一个FTP用户接口与FTP交互。用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接。

然后,为使用户能访问远程主机的账户,用户必须提供一个用户标识和口令,作为FTP命令的一部分在该TCP连接上传送。一旦该服务器向该用户授权,用户就能从本地文件系统向远程文件系统传送文件,反之亦然。

三、HTTP与FTP的异同点

1. 同:

(1)都是应用层协议;

(2)都运行在TCP上,即都使用TCP(而不是UDP)作为其支撑的运输层协议。

2. 异:

(1)HTTP是超文本传输协议,是面向网页的;FTP是文件传输协议,是面向文件的。

(1)HTTP协议默认端口:80号端口。FTP协议默认端口:21号端口。

(3)FTP的控制信息是带外(out-of-band)传送的,而HTTP的控制信息是带内(in-band)传送的。

FTP使用两个并行的TCP连接来传输文件,一个是 控制连接(control connection),一个是 数据连接(data connection)。

控制连接用于在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及“put”和“get”文件的命令。

数据连接用于实际传输一个文件。

因为FTP协议使用一个分离的控制连接,因此称FTP的控制信息是带外传送的。 
        而HTTP协议是在传输文件的TCP连接中发送请求和响应首部行的,因此其控制信息是带内传送的。

(3)FTP服务器必须在整个会话期间保留用户的状态(state)信息,而HTTP是无状态的。

FTP服务器必须把特定的用户账户与控制连接联系起来,随着用户在远程目录树上移动,服务器必须追踪用户在远程目录树上的当前位置。对每个活动着的用户会话的状态进行追踪,可以对FTP会话总数进行限制。

(4)FTP的控制连接是持久连接,数据连接是非持久连接;而HTTP既可以使用非持久连接,也可以使用持久连接,默认方式下,HTTP使用持久连接。

当用户主机与远程主机开始一个FTP会话前,FTP的客户机(用户)首先在21号端口上发起一个用于控制的与服务器(远程主机)的TCP连接。FTP的客户机通过该控制连接,发送用户的标识和口令,也发送改变远程目录的命令。

1)FTP的PORT(主动式)工作方式:当需要传送数据时,客户端在控制连接链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据连接链路来传送数据。

2)FTP的PASV(被动式)工作方式:当需要传送数据时,服务器在控制连接链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据连接链路来传送数据。

如果在同一个会话期间,用户还需要传输另一个文件,FTP则打开另一个数据连接。

因此,FTP的控制连接贯穿了整个用户会话期间,但是针对会话中的每一次文件传输,都需要建立一个新的数据连接。故,控制连接是持久连接,而数据连接是非持久连接。

[转载]ftp和http区别的更多相关文章

  1. atitit.网络文件访问协议.unc smb nfs ftp http的区别

    atitit.网络文件访问协议.unc smb nfs ftp http的区别 1. 网络文件访问协议1 2. NETBios协议  2 3. SMB(Server Message Block)2 3 ...

  2. [转载]hashmap hashtable 的区别

    Hashtable 和 HashMap 做为 Map 的基本特性 两者都实现了Map接口,基本特性相同 -          对同一个Key,只会有一个对应的value值存在 -          如 ...

  3. http和ftp下载的区别

    HTTP和FTP是两种网络传输协议的缩写,FTP是File Transportation Protocol(文件传输协议)的缩写,而HTTP则是Hyper Text Transportation Pr ...

  4. 转载IEnumerable与IEnumerator区别

    public interface IEnumerable {     IEnumerator GetEnumerator(); }   public interface IEnumerator {   ...

  5. ftp主动与被动模式区别

    FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口).但FTP工作方式的不同 ...

  6. 转载 j2ee j2se j2me 区别,mvc 和ssh联系理解

    [转]J2SE J2EE J2ME的区别 以及 MVC与SSH对应关系 2014-3-6阅读322 评论0 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在J ...

  7. solairs11与solairs10 ftp服务的区别

    Migration from Solaris WU-FTPD to ProFTPD Introduction ------------ This document provides an overvi ...

  8. NFS FTP SAMBA的区别

    Samba服务 samba是一个网络服务器,用于Linux和Windows之间共享文件. samba端口号 samba (启动时会预设多个端口) 数据传输的TCP端口 139.445 进行NetBIO ...

  9. [转载]onclientclick和onclick区别

    OnClientClick是客户端脚本,一般使用javascript,在客户端,也就是IE中运行,点击后马上执行OnClick是服务器端事件处理函数,使用C#或者vb.net,在服务器端,也就是IIS ...

随机推荐

  1. Wireshark抓取本地回环接口数据包 RawCap.exe

    Wireshark提供了winpcap可以抓取远程网卡数据包...但我尝试了不成功.后来发现RawCap.exe不仅可以抓取回环接口数据包,远程跑了拿到pcap文件再打开用起来比winpcap更方便最 ...

  2. java+上传+文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素:   1.表单提交方式:post (get方式提交有 ...

  3. 初识QuartusII 9.0(破解,半加器的仿真,综合:上)

    由于在意大利期间,用的xilinx公司的ZYBO板子,相应的软件用ISE,SDK.回国买了altera公司的板子,自然也要学习国内较流行的软件(TB大西瓜家,因此相关例程也是大部分引用他家).Quar ...

  4. LibreOJ #115. 无源汇有上下界可行流

    二次联通门 : LibreOJ #115. 无源汇有上下界可行流 /* LibreOJ #115. 无源汇有上下界可行流 板子题 我也就会写写板子题了.. */ #include <cstdio ...

  5. 解决vue多个路由共用一个页面的问题

    在日常的vue开发中我们可能会遇见多个路由需要共用一个页面的需求,特别是当路由是通过动态添加的,不同的路由展示的东西只是数据不同其他没有变化.例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  6. ACwing_789. 数的范围

    算法竞赛进阶指南上说据说只有10%的程序员能写对二分,而我这种蒟蒻..所以虽然这是一道非常基础的二分,但我觉得对我来说还是有必要写一篇博客来总结一下,也在写的过程中检验一下自己. 一开始看到这道题我还 ...

  7. redis之为什么redis是单线程?

    官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽.既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的 ...

  8. Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制

    有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...

  9. C# WinForm快捷键设置技巧

    C# WinForm快捷键设置技巧 1.Alt+*(按钮快捷键) 按钮快捷键也为最常用快捷键,其设置也故为简单.在大家给button.label.menuStrip等其他控件的Text属性指定名称时, ...

  10. Animator动画XML实现

    在res下创建文件夹animator文件夹 <?xml version="1.0" encoding="utf-8"?> <objectAni ...