- 链接: https://pan.baidu.com/s/1bp08VvT 密码: nnyd
章节一:了解Web及网络基础
** 1.1 使用HTTP协议访问web**
-
客户端(client):通过发送请求获取服务器资源的web浏览器。
- WWW(World Wide Web,万维网)三项构建技术
把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标 记语言HTML(HyperText Markup Language,超文本标记语言)。
作 为文档传递协议的 HTTP;
指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)
TCP/IP协议
-
计算机与网络要互相通信,双方就必须基于相同的方法,不同的硬件,操作系统都需要一种规则,我们把这种规则称之为协议(protocol)。
- 互联网相关联的协议集合起来总称为 TCP/IP。也有说 法认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称.
TCP/IP 分层管理
- 应用层:
- HTTP ,FTP, DNS(Domain Name System, 域名系统)
- 传输层
- 网络层
- ```网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对 方计算机,并把数据包传送给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层 所起的作用就是在众多的选项内选择一条传输路线。```
- 链路层(网络接口层)
- ```用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴 均在链路层的作用范围之内**```
![Snip20170427_8.png](http://upload-images.jianshu.io/upload_images/2319649-b459f8a15f50413b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**与HTTP相关的IP,TCP,DNS协议**
- IP:
- 属于网络层,不要和IP地址混淆,它是一种协议
- 它的作用是把数据包传送给对方。确保能传递准确和成功的两个重要条件是:IP地址和MAC地址。
- IP地址指的是节点分配地址,可变换,MAC地址基本不会更改
https://bbs.hupu.com/bxj
bbs.hupu.com/bxj就是指节点分配地址,还是bxj是节点地址,希望有看到的朋友请指教
- ARP 协议凭借 MAC 地址进行通信
```IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才 能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址 来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就
可以反查出对应的 MAC 地址。
- 路由选择
在到达通信目标前的中转过程中,那些计算机和路由器等网络设备 只能获悉很粗略的传输路线。这种机制称为路由选择(routing),所以无论哪台计算机或哪台网络设备都无法掌握全面的细节
- TCP协议位于网络层,提供可靠的的字节流服务
- 字节流服务:将数据库切割成报文段(segment)的单位数据,TCP 协议为了更容易传送大数据才把数据分割。
- 可靠性:准确的送达到对方
- 三次握手:确保数据传输的可靠性
回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送 端再回传一个带 ACK 标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序 发送相同的数据包。```
![Snip20170427_10.png](http://upload-images.jianshu.io/upload_images/2319649-b1dc99a585701d1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- DNS协议:提供通过域 名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
![Snip20170427_11.png](http://upload-images.jianshu.io/upload_images/2319649-3cb1df1be3307294.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**HTTP与各种协议的关系**
![Snip20170427_12.png](http://upload-images.jianshu.io/upload_images/2319649-a97d224c2f734b04.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```client发送URL请求,首先DNS会将解析对应的IP地址,HTTP协议生成针对目标服务器的HTTP请求报文,TCP协议将报文割成文段,按序号分为多个数据包,可靠的发给对方(三次握手),通过ARP协议解析IP地址的MAC地址,发给对方(IP协议),此处会有通过路由中转的过程。服务器接收数据包,再以TCP协议按序号顺序重组报文,HTTP解析报文,服务器处理内容在以相同的方式向用户进行回传
URI/URL
- URI(Uniform Resource Locator,统一资源定位符)
- URL 是URI的子集
-
URL的格式:
- RFC(Request for Comments)HTTP协议技术的标准文档
章节二:HTTP 协议用于客户端和服务器端之间的通信
通过请求和响应交换达成协议
-
请求报文:
-
请求方法、请求 URI、协议版本、可选的请求首部字
段和内容实体构成的。
-
-
响应报文
- 请求内容的处理结果以响应的形式返回
HTTP是一种不保存状态
- 请求内容的处理结果以响应的形式返回
HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议 自身不对请求和响应之间的通信状态进行保存。
协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成 如此简单的。
为了保持状态,HTTP1.1引入Cookie概念。
告知服务器意图的 HTTP 方法GET :获取资源
GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保 持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接 口)那样的程序,则返回经过执行后的输出结果。
POST:传输实体主体
POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容。
PUT :传输文件
- HEAD:获得报文首部
- DELETE:删除文件
但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一样不带验证机 制,所以一般的 Web 网站也不使用 DELETE 方法```
- OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
- TRACE 方法 是让 Web 服务器端将之前的请求通信环回给客户端的 方法。
- CONNECT:要求用隧道协议连接代理
![Snip20170427_18.png](http://upload-images.jianshu.io/upload_images/2319649-54dac7e7aed8b5be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**HTTP长连接**
- 每次的请求都会造成无谓的 TCP 连接建立和断开, 增加通信量的开销
- HTT持久倡长连接只要任意一端没 有明确提出断开连接,则保持 TCP 连接状态
- 管线化:持久连接使得多数请求以管线化(pipelining)方式发送成为可能。 从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术 出现后,不用等待响应亦可直接发送下一个请求。
![管线化.png](http://upload-images.jianshu.io/upload_images/2319649-fffb37cccc128494.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**使用 Cookie 的状态管理**
- Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态
```Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪 一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前 的状态信息
HTTP报文内的HTTP信息
-
HTTP报文大致可分为报文首部,报文主两块。通常,并不一定要有报文主体。
- 请求报文和响应报文的组成
- 请求行
包含用于请求的方法,请求 URI 和 HTTP 版本。 - 状态行
包含表明响应结果的状态码,原因短语和 HTTP 版本。 - 首部字段
包含表示请求和响应的各种条件和属性的各类首部。
- 请求行
编码提升传输效率
- 报文
- 基本单位:8位字节流
- 实体
- 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实 体首部和实体主体组成。
压缩传输内容编码
- 内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
- 常用的内容编码格式:
- gzip
- compress(UNIX 系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
分割发送的分块传输编码
- 分块传输编码
在 HTTP 通信过程中,请求的编码实体资源尚未全部传输完成之 前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割 成多块,能够让浏览器逐步显示页面,这种实体分块功能称为传块编码
- 分块传输会将实体主体分为多个部分,每一部分用16进制开标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”
- HTTP/1.1 中存在一种称为传输编码(Transfer Coding)的机制,它 可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中来标记。
发送多种数据的多部分对象集合
- MIME(Multipurpose Internet Mail Extensions,多用途因特网 邮件扩展)机制
多部分对象集合包含的对象如下 - multipart/form-data
在 Web 表单文件上传时使用。 - multipart/byteranges
状态码 206(Partial Content,部分内容)响应报文包含了多个范 围的内容时使用。 - multipart/form-data
- multipart/byteranges
获取部分内容的范围请求
内容协商返回最合适的内容
- 当浏览器的 认 为 或中文, 问相同 URI 的 Web 页面时, 会显示对应的 版或中文版的 Web 页面。这样的机制 为内容协
- 请求报文中首部字段的判断基准
- Accept
- Accept-Charset
- Accept-Language
- Content-Language
- 内容协 技术有以 3 种
- 服务器 动协商(Se e - i en Negotiation)
- 客户端 动协商(Agent- i en Negotiation)
- 明协商(T ans a ent Negotiation)
HTTP返回结果状态码
状态码的职 是当客户端向服务器端发送请求时, 返回的请求 结果。借助状态码,用户可以知道服务器端是正常 理了请求,还是出 现了 。
-
以3位数字和原因组成的短语叫做状
用单台虚拟主机实现多个域名
- HTTP/1.1 许一 HTTP 服务器 建多个 Web 站点
- 即使 理 面只有一 服务器,但只要使用 主机的功能, 可 以 想已具有多 服务器。
- 在相同的 IP 地 ,由于 主机可以 存多个不同主机名和域 名的 Web 网站,因此在发送 HTTP 请求时, 在 Host 首部内完整指 定主机名或域名的 URI。
通讯数据转发程序:代理 网关 隧道
-
代理
-
代理服务器最基本的行为就是接受客户端发送给他的请求
-
在 HTTP 通信过程中,可级联多 代理服务器。请求和响应的 发 会经过数 一样 接起来的代理服务器。 发时,需要 加 Via 首部字段以标记出经过的主机信
- 代理使用方法的两种基类分类
- 缓存代理
- 代理使用方法的两种基类分类
-
当代理再 接 到对相同资源的请求时,就可以不从源服务器那里 资源,而是将之前缓存的资源作为响应返回。```
- 透明代理
发请求或响应时,不对报文做 何加工的代理 被 为透明代 理(Transparent Pro y)。 之,对报文内容进行加工的代理被 为 透明代理
- 网关
- 网关的工作机制和代理十分相似。网关能使通信路上的服务器提供非HTTP协议的服务。
- 利用网关能提高通信的安全 ,因为可以在客户端与网关之间的通 信 路上加密以确保 接的安全。 如,网关可以 接数据 ,使用 S L 查 数据。另外,在 Web 网站上进行信用 结 时,网
关可以和信用 结 联动。
- 隧道
```隧道是在相隔甚远的客户端和服务器之间进行中转的,并保持双方通讯链接的应用程序。
- 隧道可 要求建立起一 与其他服务器的通信 路, 时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的 通信。
- 隧道不会解析HTTP请求,原样转给服务器,隧道会在客户端和服务器断开连接时结束。
保存资源的缓存
- 缓存服务器的 在于利用缓存可 多 从源服务器 发资源。 因此客户端可就 从缓存服务器上 资源,而源服务器也不 多 理相同的请求了。
HTTP 首部
HTTP报文首部
-
在请求中,HTTP报文由方法 URL HTTP版本 HTTP首部字段构成。
4种HTTP首部字段类型
- 通用首部字段
- 请求报文和响应报文两方都会使用的首部。如协议版本号
- 请求首部字段
- 从客户端向服务器端发送请求报文时使用的首部。 了请求的加内容、客户端信 、响应内容相关 先级等信 。
- 响应首部字段
- 从服务器端向客户端返回响应报文时使用的首部。 了响应的 加内容,也会要求客户端 加 外的内容信 。
- 实体首部字段
- 对请求报文和响应报文的实体部分使用的首部。 了资源内容 更新时间等与实体有关的信 。
HTTP 首部字段一览
- 对请求报文和响应报文的实体部分使用的首部。 了资源内容 更新时间等与实体有关的信 。
非HTTP/1.1首部字段
- 在 HTTP 协议通信交互中使用到的首部字段,不 于 RFC2616 中 定义的 47 种首部字段。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用 也很高。
这些 正式的首部字段 一 在 RFC4229 HTTP Header Field Registrations 中。
End-to-end首部 和 Hop by hop首部
HTTP/1.1通用首部字段
-
Cache-Control
通过指定首部字段 Cache-Control 的指令,就能 作缓存的工作机制。指令的 数是可 的,多个指令之间通过“,”分 。首部字段,Cache-Control 的指令可用于请求及响应时。
-
Connetion
- 控制不在转发给代理的首部字段
-
Connection: 不再发的首部字段
-
- 管理持久链接
- HTTP/1.1 之前的 HTTP 版本的 认 接都是 持 接。为此, 如果想在 版本的 HTTP 协议上维持持 接, 需要指定 Connection 首部字段的值为 Keep-Alive。
- 控制不在转发给代理的首部字段
-
Date
- 首部字段 Date 表明 建 HTTP 报文的日 和时间。
-
Pragma
- Pragma 是 HTTP/1.1 之前版本的 史 留字段,仅作为与 HTTP/1.0 的向后 容而定义。
- 该首部字段 于通用首部字段,但只用在客户端发送的请求中。客 户端会要求所有的中间服务器不返回缓存的资源。
- EG: Pragma:no-cache
-
Trailer
- 首部字段 Trailer 会 先说明在报文主体后记 了哪些首部字段。该 首部字段可应用在 HTTP/1.1 版本分 编码时。
-
Transfer - Encoding
- 规定了报文主体采用的编码方式
-
Upgrade
- 首部字段 Upgrade 用于检 HTTP 协议及其他协议是否可使用更高 的版本进行通信,其 数值可以用来指定一个完全不同的通信协议。
-
Via
- 使用首部字段 Via 是为了 客户端与服务器之间的请求和响应报 文的 路 。
Warning
请求首部字段
请求首部字段是从客户端 服务器端发送请求报文中所使用的字 段,用于 请求的 加信 、客户端信 、对响应内容相关的 先级 等内容。
- Accept
Accept 首部字段可通知服务器,用户代理能 理的 体 及 体 的相对 先级。 可使用 type/subtype 这种形式,一 指定多种 体 。
- 文本文件,图片文件...
- text/html, text/plain, text/css ...
- q表示权重 0-1的小数,默认1,以分好;分割。 quality factor 质量因数
- Accept-Charset
- 首部字段可用来通知服务器用户代理支持的字 及字 的相对 先顺序。另外,可一 指定多种字 。与首部字 段 Accept 相同的是可用权重 值来表示相对先级。
- 该首部字段应用于内容协 机制的服务器 动协 。
- Accept-Encoding
- 首部字段用来 知服务器用户代理支持的内容编 码及内容编码的 先级顺序。可一 指定多种内容编码
- Accept - Language
- 首部字段 Accept-Language 用来 知服务器用户代理能 理的自 然 (指中文或 文等),以及自然 的相对 先级。可一 指定多种自然 。q表示权重
- Authorization
- Expect
- 客户端使用首部字段 Expect 来 知服务器, 望出现的某种特定 行为。因服务器无法理解客户端的 望作出回应而发生 时,会返回 状态码 417 E pectation Failed。
- From
- 首部字段 From 用来 知服务器使用用户代理的用户的 件地 。 通常,其使用目的就是为了显示 引 等用户代理的 人的 件联 方式。使用代理时,应 可能包含 From 首部字段(但可 能会因代理不同,将 件地 记 在 User-Agent 首部字段内)。
- Host
- 首部字段 Host 会 知服务器,请求的资源所 的互联网主机名和 端 。Host 首部字段在 HTTP/1.1 内是 一一个 被包含在请 求内的首部字段。
为cookie服务的首部字段
HTTP的缺点
- HTTP的不足
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遇到伪装
- 无法验证报文的完整性,所以有可能已遭篡改
加密策略
- 通信的加密
一种方式就是讲通信加密。HTTP协议中没有加密机制但可以通 过和SSL(Secure Socket Layer,安全 接 )或TLS(Transport Layer Security,安全 协议)的 使用,加密 HTTP 的通信内容。
- 内容加密
对HTTP报文内容进行加密
不验证通信方的身份就会可能遭遇伪装
- HTTP协议非常简单,但是存在各种隐患
- 无法确定请求发送 目 的 Web 服务器是 是 实意图返回 响应的 台服务器。有可能是已伪装的 Web 服务器
- 无法确定正在通信的对方是否具备访问权限。
- 无法判断请求来自何方,出自谁手
- 即使是无意义的请求也会照单全收。
查看对手的证书
HTTP +加密+认证+ 完整性保护 = HTTPS
- HTTPS不是一种新的应用层协议。只是HTTP部分通信接口用SSL和TLS
-
HTTP 接和 TCP 通信。当使用 SSL 时, 变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简 之,所谓 HTTPS,其实就是 身 SSL 协议这 外 的 HTTP