第一章——了解web及网络基础
1.1 使用HTTP协议访问Web
在浏览器的地址栏输入URL时,可以看到web页面,即使你不了解其运作原理,也能看到web页面。
发送请求获取服务器资源的web浏览器,称之为客户端。
web使用一种名为HTTP(超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。
1.2 HTTP的诞生
1.2.1 为知识共享而规划web
WWW: 万维网world wide web
HTML:超文本标记语言hypertext markup language
URL :统一资源定位符uniform resource locator
SGML:标准通用标记语言 standard generalized markup language
1.2.2 web 成长时代
1.2.3 驻足不前的HTTP
HTTP/0.9 HTTP/1.0 HTTP/1.1
1.3 网络基础TCP/IP
1.3.1 TCP/IP协议族
协议(Protocol):不同的硬件,操作系统之间的通信,所用的这一切都需要一种规则,这种规则称为协议。
与互联网相关联的协议集合起来总称为TCP/IP。
1.3.2 TCP/IP的分层管理
TCP/IP协议族里最重要的一点就是分层。
TCP/IP分为四层:应用层、传输层、网络层、数据链路层。
应用层:向用户提供应用服务时通信的活动。
HTTP协议就在这一层。
传输层:提供处于网络连接中的两台计算机之间的数据传输。
这一层的协议有: TCP(Transmission Control Protocol,传输控制协议)、UDP(User Data Protocol,用户数据报协议),DNS(Domain name system域名系统)
网络层:IP协议在这一层。
用来处理在网络层上流动的数据包。数据包是网络传输的最小数据单位。
数据链路层:用来处理网络的硬件部分。物理设备
1.3.3 ——TCP/IP通信传输流
利用TCP/IP进行网络通信时,会通过分层顺序与对方进行通信。
发送端(客户端):从应用层往下走,
接收端(服务器):从应用层往上走。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。
封装:把数据信息包装起来的做法称为封装
1.4 与HTTP关系密切的协议:IP、 TCP和DNS
1.4.1 负责传输的IP协议
IP位于网络层,所有使用网络的系统都会用到IP协议。
IP和IP地址:
IP其实是一种协议的名称。
IP协议:就是把数据包传送给对方,而要保证确实传送到对方那里,两个重要的条件是IP地址和MAC(媒体访问控制地址)。
IP地址:指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本不会改变。
利用ARP(地址解析协议address resolution protocol)协议凭借MAC地址进行通信
IP间的通信依赖MAC地址。
ARP协议是一种解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获得很粗略的传输路线。
这种机制称为路由选择。
无论那台计算机,那台网络设备,他们都无法掌握互联网中的细节。
1.4.2 确保可靠性的TCP协议
按层次分,TCP位于传输层,提供可靠的字节流服务(byte stream service)。
字节流服务:为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。
可靠的传输服务是把数据准确可靠地传给对方。
TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。
确保数据能到达目标(TCP协议的三次握手three-way handshaking)
用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,一定会向对方确认是否成功送达。
握手过程中使用了TCP的标志—— SYN(synchronize异步)和ACK(确认acknowledgement)
1. 首先,发送端会发送给接收端一个带有SYN标志的数据包
2.然后,接收端收到来自发送端发送的SYN标志后,会发送给发送端带有SYN/ACK标志的数据包
3.最后,发送端确认接收端已经收到了,会发送给接收端带有ACK标志的数据包。
1.5 负责域名解析的DNS(domain name system)服务
DNS是和HTTP协议位于同一层的协议。
它提供了域名到IP地址之间的解析服务。
用户经常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。
计算机既可以被赋予IP地址,也可以被赋予主机名和域名。
DNS协议通过域名查找IP地址,或者逆向从IP地址反查域名的服务。
1.6 各种协议与HTTP协议的关系
1.7 URI和URL
URI(Uniform Resource Identifier统一资源标识符)和URL(Uniform Resource Locator统一资源定位符)。其实相比于前者我们更熟悉后者。
1.7.1 URI(了解)
URL是URI的子集。
统一资源标识符(URI)通用语法”中列举了几种 URI 例 子,如下所示。
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
1.7.2 URI格式
第二章 简单的HTTP协议
2.1 HTTP协议用于客户端和服务器端之间的通信
客户端: 请求访问文本或图像等资源的一端
服务器端:提供资源相应的一端
2.2 通过请求和响应的交换达成通信
HTTP协议规定,请求从客户端发出,最后服务器端响应应该请求并返回。
客户端发送给某个http服务器端的请求报文中的内容。
请求报文的构成:请求的方法、请求的URI、协议版本、可选的请求首部字段和内容实体构成。
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT Content-Length: 362
Content-Type: text/html
<html> ......
HTTP/1.1 表示服务器对应的HTTP版本。
200 OK 表示请求处理的状态码(status code)和原因短语。
下面的几行表示创建响应的日期时间,
响应报文由:协议版本、状态码、原因短语、响应首部字段、主体组成。
2.3 HTTP是不保存状态的协议 (无状态协议stateless)
使用HTTP协议,每当发送新的请求时,就会有新的响应产生。
HTTP协议本身不具有保留之前请求或响应报文的信息。这样可以更快的处理大量的事务。
但是在后面的实际需求中会发现,我们需要保留自己曾经登录过的信息,这就出现了cookie技术。
cookie可以管理状态,可以实现保持的登录状态。
2.4 请求 URI定位资源
2.5 告知服务器意图的HTTP方法
GET:获取资源
GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。
如果访问的是文本,那就保持原样返回;
如果是CGI(commom getway interface),那就返回执行后的输出结果。
POST :传输实体主体
POST方法用来传输实体的主体。
PUT:传输文件 (了解即可)
put 方法用来传输文件。要求在请求报文的主体中包含文件的内容,然后保存到请求URI指定的位置。HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,所以会存在安全性问题,因此一般的web网站不使用此方法。
HEAD获得报文首部
HEAD方法和GET方法一样,只是不返回报文的主体部分。
DELETE:删除文件 (了解即可)
按照 URI删除指定的资源。
DELETE方法和PUT方法使用一样不带验证机制,因此一般的web网站不使用此方法。
OPTIONS(选项):询问支持的方法
options用来查询针对请求URI指定资源支持的方法。
TRACE:跟踪路径(了解就行了)
trace方法是让web服务器端之间的请求通信环回给客户端的方法。(这句话理解起来比较抽象,因此往下看吧。)
发送请求,在Max-Forwards首部字段中填入数值,每经过一个代理服务器就将该数字减1,当数值刚好减到0时,就停止继续传输。最后接收到请求的服务器则返回状态码200 OK的响应。
CONNECT :要求用隧道协议连接代理(重要)
connect方法要求在与 代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
主要使用 SSL和TLS协议(这两个协议可以称之为HTTPS协议)把通信内容加密后经网络隧道传输。
connect方法的格式如下:
connect 代理服务器名:端口号 HTTP版本
2.6 使用方法下达命令
请求URL指定的资源发送请求报文时,采用称为方法的命令。
这里最常用的方法就是 GET POST HEAD 其次是 OPTIONS CONNECT,然后DELETE PUT TRACE了解一下即可。
2.7 持久连接节省通信量
在初始的HTTP协议中,每进行一次HTTP通信就要断开一次TCP连接。
这种情况只适用于数据访问量较少的情况,文本数量很小的传输,传输起来没有问题的。
但是对于现在来说,或者随着HTTP的普及,数据量和文件量以及访问请求较大的情况下,上面的就不再适用了。
如果在采用之前初始的HTTP协议会出现这样一个问题,每次的请求会造成无谓的TCP连接建立和断开,增加通信量的开销。
2.7.1 持久连接
这里就提出了一个持久化连接的方法,也称为