浏览器用 HTTP 协议 或 HTTPS 协议, 向服务端请求页面的过程

过程

  1. DNS 查询找 ip 地址
  2. 用 HTTP 或 HTTPS 协议,向服务端请求页面
  3. 解析请求回来的 HTML 代码,构建 DOM 树
  4. 计算 DOM 上的 CSS 属性,得到内存中的位图
  5. 对位图合成,会加快后续的绘制速度(可选步骤)
  6. 绘制到界面上

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