浏览器用 HTTP 协议 或 HTTPS 协议, 向服务端请求页面的过程
过程
- DNS 查询找 ip 地址
- 用 HTTP 或 HTTPS 协议,向服务端请求页面
- 解析请求回来的 HTML 代码,构建 DOM 树
- 计算 DOM 上的 CSS 属性,得到内存中的位图
- 对位图合成,会加快后续的绘制速度(可选步骤)
- 绘制到界面上
HTTP 协议基于 TCP 协议。
TCP 协议是一个传输层上的协议。 HTTP 协议是一个应用层上的协议,是一个纯粹的文本协议。
TCP 协议是一个双向的通讯通道。 HTTP 协议在此基础上,使用 request-response 模式。
(必定是先由浏览器发起的)
请求报文:
-
请求示例:
响应报文
-
响应报文示例
HTTP 响应回来的 状态码
-
1XX
临时回应 ,表示客户端请继续
改状态被 浏览器 http 库直接处理掉了,不会让上层应用知道。
-
200
请求成功
-
3XX
表示请求的目标有变化,要客户端进一步处理。
-
301
资源已永久转移,不要再来了。 类似于报错
-
302
资源临时性转移
-
304
和 客户端的缓存一样。请求的东西在缓存里,没有有变化的东西
-
-
4XX
客户端请求错误
-
403
无权限,服务端收到请求,但拒绝提供服务。
-
404
请求的页面不存在
-
-
5XX
服务端请求错误
-
500
服务端错误
-
503
服务端暂时性的错误,可以过一会再试一下。
-
HTTPS 协议
- 作用:
- 确定请求的目标服务端身份
- 保证传输的数据不会被网络中间节点窃听或者篡改
- TLS 构建于 TCP 协议之上,是对传输的内容做的一次加密。 所以从传输内容上来看,与 HTTP 协议没有 任何区别。。。
- HTTPS 于服务端建立一条 TLS 加密通道
RFC规定文档: https://tools.ietf.org/html/rfc2818
HTTP2 协议
HTTP1.1 的升级版
-
作用
-
支持服务端推送
在客户端发请求时,服务端 可以提前把一部分数据推送给 客户端缓存起来。
避免发过来请求的顺序带来的并行度不高,导致的性能问题。
-
支持 TCP 连接复用
使用同一个 TCP 连接传输多个 HTTP 请求。
避免 TCP 连接时的三次握手开销、初建 TCP 连接时 传输窗口小的问题。
-
RFC 规定文档: https://tools.ietf.org/html/rfc7540