Skip to content

Latest commit

 

History

History
126 lines (93 loc) · 9.61 KB

note.md

File metadata and controls

126 lines (93 loc) · 9.61 KB

第一章:了解 web 及网络基础

HTTP 协议:超文本传输协议,用于从 web 客户端传递数据到服务端
TCP/IP 协议族: TCP/IP 是互联网相关的各类协议的总称,包括 HTTP 协议、IP 协议、TCP 协议等

TCP/IP 分为应用层、传输层、网络层、链路层(加强记忆口诀:应该传递网络链接),分层的好处在于未来维护改动成本相对小以及 web 应用只需要考虑分派任务的对象,不需要管对方在哪以及怎么传递
应用层:应用层向用户提供通用的应用服务,例如 FTP 文件传输、DNS 域名解析、HTTP 协议等
传输层:提供 TCP 和 UDP 协议,用于处于网络中的两个计算机数据通信
网络层:规定了通过什么路径将数据包传递给对方
链路层:用来处理链接网络的硬件部分,例如网卡等

从输入 url 开始,web 页面是如何呈现的?
从应用层开始,通过 DNS 服务解析域名得到 IP 地址,通过 HTTP 协议生成针对目标 web 服务器的 HTTP 请求报文,传输层使用 TCP 协议,接收应用层传递的数据,TCP 协议使用三次握手过程来保证了数据能精确的传递给目标方,且为了传输方便,传输层会对 HTTP 请求报文进行分割,打上序号标记以及端口号后转发给网络层,在网络层中,IP 协议通过 ARP 协议从 IP 地址得出 MAC 地址,将该 MAC 地址在传递数据中加上作为通信地址后传递给链路层。接收方则从链路层开始,逐步拆解数据包的得出 HTTP 请求报文,也是通过 TCP/IP 协议进行数据回传。

TCP 协议三次握手过程
三次握手过程是为了保证数据能准确的传递给目标方,分别是 1 发送方首先发送一个带有 SYN 标识的数据包给对方,2 接受方收到后回传一个带有 syn/ack 标识的数据包以表示接受成功,3 发送端再回传一个带有 ACK 标识的数据包表示代表握手结束

额外知识,客户端得到资源后是如何渲染到页面上?
浏览器解析 html/xvg/xml 文件形成 DOM tree,在解析过程中,一旦遇到 script 标签,会停止解析,直到对应 js 加载以及执行完毕,这就是为什么我们一般将 JS 文件放在 body 标签末尾的原因,除此之外,给 script 添加deferasync能实现加载过程不阻塞 DOM tree 构建,区别为defer会在 DOM tree 构建后,DOMContentLoaded事件触发前执行,而async则会在加载完成之后立即执行,有可能阻塞 DOM tree 构建。在构建 DOM tree 的过程中,浏览器会同时解析 css 文件形成 css rule tree,值得注意的是,script 同样会阻塞 css rule tree,的构建,都构建完成之后,DOM tree 会和 css rule tree 结合形成 rendering tree,rendering tree 和 DOM tree 未必一致,例如display: none的元素就不会出现,后再由 GUI 渲染到页面上。


第二章:简单的 HTTP 协议

HTTP 协议
HTTP 协议用于客户端和服务端之间的通信
请求报文由请求方法、请求 URL、协议版本、可选的请求首部字段、内容实体构成
响应报文由协议版本、状态码、用于解释状态码的短语、可选的响应首部字段、实体主体构成
HTTP/1.1 中所有连接默认都是持久连接,持久连接(HTTP keep-alive)减少了 TCP 连接的重复建立和断开所造成的 额外开销,减轻了服务器端的负载

// 请求报文例子

// 方法 请求URL 请求协议
POST /form/entry HTTP/1.1
// 请求首部字段
Host: hackr.jp
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
// 内容实体
name=ueno&age=37
// 响应报文例子

// 协议版本 状态嘛 解释状态码短语
HTTP/1.1 200 OK
// 响应请求的时间,响应首部字段之一
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html

// 实体主体
name=ueno&age=37

请求方法

  • GET:获取服务器上某种资源
  • POST:向服务器传递实体数据
  • PUT:传输文件
  • DELETE:删除资源
  • OPTION:询问对应请求 URL 支持的请求方法
  • HEAD:获取报文首部

Cookie
http 协议是无状态的,不会对请求或响应结果做持久化,例如 HTTP 协议本身并不知道用户是否已经成功登录。Cookie 通过在请求报文(Cookie)和响应报文(Set-Cookie)中写入信息来控制客户端和服务端状态


第三章:HTTP报文内的HTTP信息

用于HTTP协议交互的信息被称为HTTP报文,报文 = 报文首部 + 报文主体,其中首部和主体以空行(CR+LF)相隔

请求/响应报文 请求报文 = 请求行 + 请求首部字体 + 通用首部字体 + 实体首部字体 + 其他 + 报文实体 响应报文 = 状态行 + 响应首部字体 + 通用首部字体 + 实体首部字体 + 其他 + 报文实体 请求行 = 请求方法(GET、POST等) + 请求URL + HTTP版本 状态行 = 状态码 + 原因短语 + HTTP版本 首部字体 = 请求和响应的各种条件属性 其他 = Cookie等未定义的首部 报文实体用于传输请求或响应的内容实体,通常情况下,报文实体 = 内容实体

提升传输速率的方式

  1. 使用编码操作,在传输过程中压缩报文主体,例如gzip、compress、deflate等,��注意编码操作会消耗更多的CPU资源,且传输过程中的实体主体不再 等于报文主体
  2. 分块传输,将内容实体分割成多块,每一块用十六进制标记大小,最后一块会用"0(CR+LF)"来标记。通过该方式,在传输大容量数据时,能够让浏览器逐步显示页面

第七章:确保 Web 安全的 HTTPS

HTTP 缺点

  • HTTP 不具备加密功能,内容明文传递,可能会被窃听。由于互联网的开放性,在通信过程中某些网络设备、光缆、计算机等都不可能是个人的私有物,所以不排除某个环节会被恶意窥视。
  • HTTP 不验证通信双方的真实身份。WEB 服务器和客户端都有可能是伪装的,也无法判断是否具备访问权限,所有请求(包括无意义的)服务器都会响应(前提是发送端的 IP 和端口没有被限制访问),所以也就无法阻止海量请求 DDOS 攻击
  • HTTP 无法判断报文是否被修改。在 HTTP 协议中,没有任何办法自动判断请求 / 响应接受到的数据是否一致,目前有些网站会提供 MD5 等数字签名用于判断数据是否完整,但需要用户自行对比且用户无法知道数字签名的真实性

HTTPS 是什么,和 HTTP 有什么区别
HTTPS(超文本传输安全协议)并非一种新的协议,只是 HTTP 通信接口部分用 SSL 和 TLS(TSL 是以 SSL 为原型开发的,有时也统称为 SSL)协议代替而已,能一定程度上解决 HTTP 不安全的问题。使用 HTTPS,HTTP 会先和 SSL 沟通,再由 SSL 和 TCP 通信

SSL 是什么
SSL 是一种独立的安全协议,其他应用层协议也可以配合使用。在 HTTPS 中,SSL 就干了两件事,1 是加密;2 是证书;

SSL 加密
SSL 使用共享密钥加密(对称加密)和公开密钥加密(非对称加密)对进行加密。对称加密使用相同的密钥加解密,假如密钥在传递过程中被截取或接收方泄漏,密文等同明文。为了解决这个问题提出了非对称加密,用公钥加密私钥解密,仅靠公钥和密文是很难解密的。由于非对称加密比对称加密处理速度要慢,所以应该混合使用充分利用各自的优势,例如使用非对称加密交换密钥,使用对称加密加解密通信内容。

SSL 证书

  • 确保公钥的真实性。使用由权威的数字认证机构颁发公钥证书,流程为:
    服务器将自己的公开密钥登录到数字认证机构
    => 机构识别并颁发公钥证书
    => 客户端通过数字认证机构的公钥(为了躲避传递过程安全性问题,该公钥常常会被植入在浏览器内部)验证拿到的公钥证书,确认服务器公钥的真实性;
  • 确保服务器的真实性。EV SSL 证书是基于国际标准的认证指导方针颁发的证书,可以确保服务器运营的企业是否真实存在,由于不是所有用户都了解该证书,所以未必能起到想象中的效果
  • 确保客户端的真实性。SSL 还可以使用客户端证书,通过该证书对客户端进行验证,但需要用户自行安装且每张证书都需要付费,一般只有对安全性有极高要求的网站会使用,例如网上银行

SSL 协议的四次握手过程

  1. 客户端发送 Client Hello 报文,报文中包括客户端 SSL 版本,所使用的加密算法以及密钥长度等
  2. 服务端先发送 Server Hello 报文作为应答,包括 SSL 版本和加密信息。再发送 Certificate 报文,包含公开密钥证书。最后发送 Server Hello Done 报文结束
  3. 客户端先以 Client Key Exchange 报文作为回应,该报文使用第二次握手得到的公钥加密,报文中包含一种被称 Pre-master secret 的随机密码串。再发送 Change Cipher Spec 报文,提示服务器通信会使用 Pre-master secret 进行加密。最后发送 finish 报文,包含链接至今的整体校验值
  4. 服务器先发送 Change Cipher Spec 报文,再发送 finish 报文,至此,SSL 连接就算建立完成

HTTPS 缺点
HTTPS 增加了 SSL 通信过程,且 SSL 存在加解密过程,所以相比 HTTP,HTTPS 更耗费硬件和网络资源,网络负载可能会增加 2-100 倍。速度变慢的问题没有很好的解决办法,SSL 加速器只能起到一定的作用。除了速度以外,购买证书需要额外的开销也是缺点之一