HTTP协议原理
zKing 2018-10-21  HTTP
# 写在前头
- 首先献上 参考文档
 - 然后开始解答一个问题“在浏览器中输入 URL 并回车后都发生了什么?”
 - 通过这些问题再进一步加深理解
 
# 在浏览器中输入 URL 并回车后都发生了什么
# 解析 URL 进行跳转

# DNS 解析
- 查询浏览器缓存
 - 检查系统缓存
 - 检查路由器缓存
 - 查询 ISP DNS 缓存
 - 递归查询
 
# 浏览器与网站建立 TCP 连接(三次握手)
以下的等于 1,是表示它占据了第一个标志位,并不是说对应的数值
- 第一次握手:客户端向服务器端发送请求(SYN=1) 等待服务器确认;
 - 第二次握手:服务器收到请求并确认,回复一个指令(SYN=1,ACK=1);
 - 第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
 

# HTTP 请求和传输数据
# HTTP 请求方法
- GET:获取资源
 - POST:传输实体主体
 - HEAD:获取报文首部
 - PUT:传输文件
 - DELETE:删除文件
 - OPTIONS:询问支持的方法
 - TRACE:追踪路径
 
# HTTP 请求报文
HTTP 请求报文是由三部分组成: 请求行, 请求报头和请求正文。

# 服务器处理请求并返回 HTTP 报文
HTTP 响应报文也是由三部分组成: 状态码, 响应报头和响应报文。
常见的状态码请点击 这里 查看
# 浏览器渲染页面
- 浏览器解析 HTML 文件构建 DOM 树
 - 然后解析 CSS 文件构建渲染树,计算出最终的样式数据,形成 css 对象模型 CSSOM。
 - 利用 DOM 和 CSSOM 构建一个渲染树
 - 等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和 repain(重绘)。
- reflow 
- DOM 节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等的过程称为“回流”。
 
 - repain。
- 当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容的过程称为“重绘”。
 
 
 - reflow 
 - 页面在首次加载时必然会经历 reflow 和 repain。
 - reflow 和 repain 过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该 尽可能少的减少 reflow 和 repain。
 
# 总结
最后,用一张图来进行总结,更加深入的知识将放在其他文章中。
