第一章 了解web和网络基础
1.1用Http协议访问web
1.2 TCP/IP
HTTP协议属于TCP/IP协议,为其中的子集;
TCP/IP 协议族按层次分别分为以下 4 层:
- 应用层(向用户提供应用服务时通信的活动,HTTP协议就属于这一层)
- 传输层(对上层提供处于网络连接中的两台计算机之间的数据传输)
- 网络层(该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方)
- 数据链路层(用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、NIC)
IP协议:
- IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方 那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC
- 地址 IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定 地址。IP 地址可以和 MAC 地址进行配对。IP地址可变换,但 MAC 地址基本上不会更改
TCP协议:
- TCP 位于传输层,提供可靠的字节流服务 TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方
- 流程:发送端—标有SYN的数据包—》接收端----收到后发送标有SYN/ACK的数据包—》发送端—发送标有ACK的数据包—》接受端(握手结束)(还有其他的手段保持可靠性)
1.3DNS服务:
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务
URI和URL
URI就是由某个协议方案表达的资源的定位标识符(协议方案指访问资源所使用的协议类型名称),用字符串标识某一互联网资源,URL则表示资源的地址。所以URL是URI的子集。
绝对URI格式:
第二章 简单的HTTP协议
2.1请求与相应的交换:
- 请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段 和内容实体构成的
- 响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代 码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主 体构成。
2.2请求URI定位资源:
HTTP协议使用URI定位互联网上的资源。
告知服务器意图的方法:
1.GET:获取资源(从服务器获取信息)
GET方法用于请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容;
2.POST:传输实体主体(向服务器传输信息)
3.PUT:传输文件
由于自身不带验证机制,存在安全性问题,一般不用。
4.HEAD:获取报文首部
与GET方法一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期等。
5.DELETE:删除文件
DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源,同样不带验证机制,不安全。
6.OPTIONS: 询问支持方法
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
7.TRACE:追踪路径
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。
8.CONNECT:要求用隧道协议连接代理
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信
2.3.1持久连接
持久连接主要是解决页面众多资源的处理时,需要重复的断开又连接,这样会造成通信量的大量开销问题。而持久连接就可以一次进行连接后,若任意一端没有明确提出断开,则保持TCP连接状态。
2.3.2管线化
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求.
第三章 HTTP报文内的HTTP信息
3.1HTTP报文
用于 HTTP 协议交互的信息被称为 HTTP 报文,大致分为报文首部和报文主体。
3.2.1 报文主体和实体主体的差异
- 报文(message) 是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence, 其中 octet 为 8
个比特)组成,通过 HTTP 通信传输。 - 实体(entity)作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。 HTTP 报文的主体 用于传输请求或响应的实体主体。
3.2.2 压缩传输的内容编码
HTTP 协议中有一种被称为内容编码的功能能保持实体原样压缩,指明应用在实体内容上的编码格式,内容编码后的实体由客户端接收并负责解码。
3.2.3 分割发送的分块传输编码
在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面,以免在数据未完全传输过来时,网页无法显示的情况。
3.3 发送多种数据的多部分对象集合
HTTP协议中采用了多部分对象集合,发送的一分报文主体内可含有多类型实体。
多部分对象集合包含的对象如下:
multipart/form-data
在 Web 表单文件上传时使用。
multipart/byteranges
状态码 206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。
- 在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上Content-type。(Content-type:multipart/form-data等)
- 使用 boundary字符串来划分多部分对象集合指明的各类实体。在 boundary 字符串指定的各个实体的起始行之前插入“–”标记(例如:–AaB03x、–THIS_STRING_SEPARATES),而在多部分对象集合对 应的字符串的最后插入“–”标记(例如:–AaB03x–、-- THIS_STRING_SEPARATES–)作为结束。
3.4 范围请求
指定范围发送的请求叫做范围请求。
执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围
byte范围的指定形式如下:
- 5001~10000字节: Range:bytes=5001~10000
- 5001字节之后的全部: Range:bytes=5001-
- 从一开始到3000字节和5000~7000字节的多重范围 Range:bytes=-3000,5000~7000
(对于多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文)
如果服务器无法响应范围请求,则会返回状态码200 OK和完整的实体内容。
3.5内容协商返回最合适的内容
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
该技术有三种类型:
- 服务器驱动协商;
- 客户端驱动协商;
- 透明协商(1与2的结合)
第四章 返回结果的HTTP状态码
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。
4.1 状态码告知从服务器端返回的请求结果
状态码以 3 位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下 5种:
4.2 2XX成功
2XX的响应结果表面请求被正常处理了。
- 200 OK 表示从客户端发来的请求在服务器端被正常处理了。
- 204 No Content 表示请求处理成功,但没有资源可返回。(一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用)
- 206 Partial Content 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含有Content-Range指定范围的实体内容
4.3 3XX重定向
3XX响应结果表明浏览器需要执行某些特殊的处理以正常处理请求。
- 301 Moved Permanently 永久性重定向,该状态码表面请求的资源已被分配到新的URI,以后应使用资源现在所指的URI
- 302 Found 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
- 303 See Other 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。
(303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。) - 304 Not Modified 该状态码表示客户端发送附带条件的请求时,服务器允许请求访问资源,但未满足条件的情况(304 状态码返回时,不包含任何响应的主体部分)
- 307 Temporary Redirect 临时重定向。该状态码与 302 Found 有着相同的含义,但307会遵照浏览器标准,不会从Post变成GEt
4.4 4XX客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在。
- 400 Bad Request 该状态码表明请求报文中存在语法错误。
- 401 Unauthorized 该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用 户认证失败。
- 403 Forbidden 表面请求资源的访问被服务器拒绝。
- 404 Not Found 该状态码表明服务器上无法找到请求的资源。
4.5 5XX服务器错误
5XX 的响应结果表明服务器本身发生错误。
- 500 Internal Server Error 该状态码表明服务端在执行请求时发生了错误
- 503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
第五章 与 HTTP 协作的 Web 服务器
通信数据转发程序 :代理、网关、隧道
5.1 代理:代理的使用方法:
- 是否使用缓存—缓存代理(转发响应时,会预先将资源的副本保存在代理服务器上,当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回)
- 是否会修改报文—透明代理(转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之,对报文内容进行加工的代理被称为非透明代理。)
5.2 网关:
利用网关可以由HTTP请求转换为其他协议通信
5.3 隧道:
隧道可按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。确保了客户端能与服务器进行安全的
通信。隧道本身不会去解析 HTTP 请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。
第六章 HTTP首部
6.1 HTTP 首部字段
在客户端与服务器之间以 HTTP 协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
首部字段结构:由首部字段名和字段值构成的(例如:Content-Type: text/html 有多个值时,用 , 隔开)
首部字段类型:
-
通用首部字段:请求报文和响应报文两方都会使用的首部;
1.Cache-Control:通过指定该首部字段,就能操作缓存的工作机制;
Cache-Control指令如下:
注意:Cache-Control:no-cache=Location 报文首部字段对no-cache字段名具体指定了参数值,那么客户端在接收到对应的响应报文后就不能使用缓存,无该参数值时则可以使用缓存。而缓存服务器在响应报文中有no-cache的情况下始终不能进行缓存。
2.Connection首部字段:
作用:
- 控制不再转发给代理的首部字段(Collection:不再转发的首部字段名)
- 管理持久连接 (Collection:close | Keep-Alive 服务器和客户端暂时中断关系 | 持久连接关系)
- 控制不再转发给代理的首部字段
3.Date首部字段表面创建HTTP报文的日期和时间
格式有多种:
例如:Date: Tue, 03 Jul 2012 04:40:59 GMT
4.Pragma首部字段:
(Pragma: no-cache)只用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。
5.Trailer首部字段:
首部字段 Trailer 会事先说明在报文主体后记录了哪些首部字段。该首部字段可应用在 HTTP/1.1 版本分块传输编码时。
6.Transfer-Encoding 规定了传输报文主体时采用的编码方式。
7.Upgrade用于检测 HTTP 协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议
8.Via是为了追踪客户端和服务器之间的请求和响应报文二点传输路径;
9.Warning通常会告知用户一些与缓存相关的问题的警告;
1.Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。
可以给每种媒体类型增加优先级,使用q=来表示权重值,用 ;隔开,权重值范围:0~1(可精确到小数点后三位,1为最大值,不标明权重值则默认为1)
2 .Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。同样可以使用权重值(同上);
3.Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序;
4.首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级;
5.首部字段 Authorization 是用来告知服务器,用户代理的认证信息(证书值);
6.客户端使用首部字段 Expect 来告知服务器,期望出现的某种特定行为。(只定义了 100-continue(状态码 100 Continue 之意))
7.首部字段 From 用来告知服务器使用用户代理的用户的电子邮件地址;
8.首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端口号。Host 首部字段在 HTTP/1.1 规范内是唯一 一个必须被包含在请求内的首部字段。
9.首部字段 If-Match,属附带条件之一,它会告知服务器匹配资源所用的实体标记(ETag)值。
-
响应首部字段:从服务器向客户端发送请求报文时使用的首部(补充了响应的附加内容,客户端附加额外信息等);
-
实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
第七章 确保Web安全的HTTPS
7.1.1HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
使用HTTPS 通信时,不再用 http://,而是改用 https://。
7.1.2相互交换密钥的公开密钥加密技术
SSL 采用一种叫做公开密钥加密(Public-key cryptography)的加密处理方式, 加密和解密都会用到密钥。
使用两把密钥的公开密钥加密,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。
为确保公用密钥的安全性,数字证书便提供了认证机构的公开密钥,确保公开密钥的真实性。
(未完待续。。。)