1. 状态码
- 1XX 指示信息 —— 表示请求已接收,继续处理
- 2XX 成功 —— 表示请求已被成功接收,理解,接受
200 成功,用于GET与POST
- 3XX 重定向 —— 要完成请求必须进行更近一步的操作
- 4XX 客户端错误 —— 请求有语法错误或请求无法实现
400 客户端请求语法错误,服务器无法理解
403 服务器理解,拒绝执行
404 服务器无法根据客户端的请求找到资源,一般路径错误
408 超时 - 5XX 服务端错误 —— 服务器未能实现合法的请求
500 服务器内部错误
502 充当网关或代理,接收到无效请求
2. HTML解析过程
3. HTTP协议
应用层 Http ftp
运输层 TCP/UDP
网络层 IP
链路层 设备
基于TCP/IP协议的应用层协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式
两个概念
白屏时间:浏览器开始显示内容:开始渲染
<body>
标签解析完<head>
performance.timing.navigationStart|window.startTime
App –> DNS –> TCP –> Request –> Response
DNS优化:域名收敛
一般来说,手机的域名数不能超过5个,DNS相当于一个存储IP地址的数据库,类似电话本概念首屏时间:从打开网站到首屏内容渲染完成,包含JS等拉资源请求页面渲染部分
1. HTTP / 0.9
在建立TCP连接基础上
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
头信息和数据体都是二进制,统称为“帧”:头信息帧和数据帧
多工
server和client都可以同时发送多个请求和回应
数据流
每一个请求或回应的所有数据包
每个包都有一个ID,server为偶数、client为奇数,还可以设置优先级头信息压缩
有头信息表,所有字段存入,生成索引号,只发送索引
主动推送资源
头信息:文本(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、文件传输、线上游戏