1. 状态码

  1. 1XX 指示信息 —— 表示请求已接收,继续处理
  2. 2XX 成功 —— 表示请求已被成功接收,理解,接受

    200 成功,用于GET与POST

  3. 3XX 重定向 —— 要完成请求必须进行更近一步的操作
  4. 4XX 客户端错误 —— 请求有语法错误或请求无法实现

    400 客户端请求语法错误,服务器无法理解
    403 服务器理解,拒绝执行
    404 服务器无法根据客户端的请求找到资源,一般路径错误
    408 超时

  5. 5XX 服务端错误 —— 服务器未能实现合法的请求

    500 服务器内部错误
    502 充当网关或代理,接收到无效请求

2. HTML解析过程

html解析过程

3. HTTP协议

应用层 Http ftp
运输层 TCP/UDP
网络层 IP
链路层 设备

基于TCP/IP协议的应用层协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式

两个概念

  1. 白屏时间:浏览器开始显示内容:开始渲染<body>标签解析完<head>

    performance.timing.navigationStart|window.startTime

    App –> DNS –> TCP –> Request –> Response
    DNS优化:域名收敛
    一般来说,手机的域名数不能超过5个,DNS相当于一个存储IP地址的数据库,类似电话本概念

  2. 首屏时间:从打开网站到首屏内容渲染完成,包含JS等拉资源请求页面渲染部分

1. HTTP / 0.9

在建立TCP连接基础上

html0.9

2. HTTP / 1.0 GET、POST、HEAD

状态码、多字符集支持、多部分发送、权限、缓存、内容码

回应格式:头信息 + 一个空行(\r\n)+ 数据
第一行 “协议版本+状态码”
Content-Type 字段
MIME type + 编码
头信息必须ASC编码

缺点:每个TCP连接只能发送一个请求,TCP新建成本高,三次握手

解决:发送keep-alive

3. HTTP / 1.1 一直沿用到现在(20年-)

  • 不用声明connection:keep-alive多个请求复用

  • 客户端最后一个请求:connection close(同时支持6个连接)

  • 管道机制:同一个TCP可同时发多个请求,响应还是按顺序,返回 Content-Length 区分

  • 分块传输编码:Transfer-Encoding 区分,chunked

  • 新增:PUT、PATCH、HEAD、OPTIONS、DELETE。

  • HOST:指定域名,将请求发往同一个服务器不同网站

    缺点:同一个TCP里虽然可同时发送,但处理是顺序的。(队头堵塞)
    优化:合并脚本和样式,图片嵌入css代码,域名分片

    4. SPDY协议:解除最大连接数

    5. HTTP / 2

    头信息和数据体都是二进制,统称为“帧”:头信息帧和数据帧

  1. 多工

    server和client都可以同时发送多个请求和回应

  2. 数据流

    每一个请求或回应的所有数据包
    每个包都有一个ID,server为偶数、client为奇数,还可以设置优先级

  3. 头信息压缩

    有头信息表,所有字段存入,生成索引号,只发送索引

  4. 主动推送资源

    头信息:文本(ASC2)编码
    数据体:文本 / 二进制

4. DNS

找地址

1. 从本地DNS Cache

一般指浏览器

2. ISP的DNS Server

递归查询:直接返回IP地址

3. root nameserver

迭代查询
包含 • 的最高域名地址
流程: • -> com. -> example.com -> www.example.com -> IP address

4. 接收到record,保存一份到本地(TLL)

其实是DNS server,再定时取新record

5. record返回

保存一份该record副本

5. UDP和TCP

数据结构图 传输层上的通信方式不同

1. UDP

简单:不需要建立可靠连接,发送小包文件,没有错误处理
应用场景:app应用,DNS,广播传输,流媒体,线上游戏

2. TCP

建立可靠的连接(3次握手)
应用场景:web browsing、email、文件传输、线上游戏