一.什么是FTP?
FTP是文件传输协议,用于使用TCP在FTP服务器和网络中的客户端计算机之间上传和下载文件,可以将文件从一个主机复制到另一个主机。
FTP使用TCP的服务在客户端和服务器之间传输文件,会建立两个连接,一个用于TCP端口号20上的数据传输,另一个用于TCP端口号21上的控制信息(命令和响应)
用户要连上FTP 服务器,就要用到 FTP 的客户端软件,通常 Windows自带“ftp”命令,这是一个命令行的 FTP客户程序,另外常用的 FTP 客户程序还有FileZilla、 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。
二.什么是HTTP?
HTTP是超文本传输协议,是用于在万维网上传输文件(文本,图形图像,声音,视频和其他多媒体文件)的规则集。它是互联网中数据通信的基础,数据通信以客户端发送的请求开始,并以从Web服务器接收的响应结束。
只要Web用户打开Web 浏览器,就会间接的使用HTTP。HTTP是一种在TCP / IP协议套件(Internet的基础协议)之上运行的应用程序协议。
三.什么是WWW?
www是域名系统中的主机名字,例如,www配合baidu点com(域名)来用于DNS解析
百度百科:万维网WWW是World Wide Web的简称,也称为Web、3W等。WWW是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过超文本标记语言(HTML)把信息组织成为图文并茂的超文本,利用链接从一个站点跳到另个站点。这样一来彻底摆脱了以前查询工具只能按特定路径一步步地查找信息的限制
四.HTTP和FTP之间的区别
1、功能上的区别
HTTP用于访问Internet上的不同网站,将网页内容从Web服务器传输到客户端的Web浏览器,被称为单向系统。
FTP用于在FTP服务器和FTP客户端之间上传和下载文件,可以将文件从一个主机传输到另一个主机,被称为双向系统
2、连接上的区别的区别
HTTP仅建立一个链接:数据连接。
FTP建立两个链接:数据连接和控制连接。
3、使用端口的区别
HTTP使用TCP的80端口,而FTP使用TCP的20和21端口。
4、传输的文件大小的区别
HTTP可以有效地传输较小的文件,如网页;而FTP则可以有效地传输大文件。
5、验证区别
HTTP不需要身份验证;而FTP使用密码进行身份验证。
6、数据储存的区别
使用HTTP传输到设备的网页或数据内容不会保存在该设备的内存中,而使用FTP传送到设备的数据会保存在该设备的内存中。
7、显示的区别
如果用户使用HTTP,http将显示在网站的URL中;如果用户使用的是FTP,则会在URL中显示ftp。
五.HTTP响应方式总结
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
1).请求方法URI协议/版本
2).请求头(Request Header)
3).请求正文
下面是一个HTTP请求的例子:
// 请求方法uri, 协议、版本
GET/sample.jsp HTTP/1.1
// 请求头
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
// 请求正文
username=jinqiao&password=1234
(1)请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1目前支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。
GET 请求获取由Request-URI所标识的资源。
POST 在Request-URI所标识的资源后附加新的数据,给服务器提交数据。
HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
PUT 请求服务器存储一个资源,并用Request-URI作为其标识。
DELETE 请求服务器删除由Request-URI所标识的资源。
TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。
在Internet应用中,最常用的方法是GET和POST。
URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
(2)请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.
(3)请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jiao&password=1234
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。
HTTP请求方法我这里只讨论GET方法与POST方法
GET方法
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
Http://127.0.0.1/login.jsp Name=zshi&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
POST方法
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。
http响应格式
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
1 状态行
2 响应头(Response Header)
3 响应正文
在接收和解释请求消息后,服务器会返回一个HTTP响应消息。
状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。
格式: HTTP-Version Status-Code Reason-Phrase CRLF
例如: HTTP/1.1 200 OK \r\n
状态代码:
状态代码由3位数字组成,表示请求是否被理解或被满足。
状态描述:
状态描述给出了关于状态代码的简短的文字描述。
状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。
第一个数字有五种可能的取值:
- 1xx: 指示信息—表示请求已接收,继续处理。
- 2xx: 成功—表示请求已经被成功接收、理解、接受。
- 3xx: 重定向—要完成请求必须进行更进一步的操作。
- 4xx: 客户端错误—请求有语法错误或请求无法实现。
- 5xx:服务器端错误—服务器未能实现合法的请求。
状态代码状态描述 说明
200 OK 客户端请求成功
400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
401 Unauthonzed 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
404 Not Found 请求的资源不存在,例如,输入了错误的URL。
500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
(所以我们的爬虫入门是基于http协议进行的,FTP协议目前我也不懂怎么解析)