1. 从Chrome源码看DNS解析过程
客户端向域名解析服务器发起查询,然后服务器返回响应。DNS服务器nameservers是在设备接入网络的时候路由器通过DHCP发给设备的,chrome会按照nameservers的顺序发起查询,并将结果缓存,有效时间根据ttl,有效期内两次查询直接使用cache。DNS解析的结果有几种类型,最常见的是A记录和CNAME记录,A记录表示结果是一个IP地址,CNAME表示结果是另外一个域名
H5首屏秒开方案探讨:怎样减少白屏时间
总结起来,大体优化思路就是:缓存/预加载/并行,缓存一切网络请求,尽量在用户打开之前就加载好所有内容,能并行做的事不串行做。
初始化 webview ->
请求页面 ->
下载数据 ->
解析HTML ->
请求 js/css 资源 ->
dom 渲染 ->
解析 JS 执行 ->
JS 请求数据 ->
解析渲染 ->
下载渲染图片
前端优化:
- 降低请求量:
合并资源,
减少 HTTP 请求数, TCP > 对称密钥
minify / gzip 压缩,
webP,
lazyLoad - 加快请求速度:
预解析DNS => 浏览器 > 本机层 > 路由器缓存 > 本地DNS服务器 > 与DNS服务器
减少域名数,
并行加载,
CDN 分发 - 缓存:HTTP 协议缓存请求,离线缓存 manifest,离线数据缓存localStorage
- 渲染:JS/CSS优化,加载顺序,服务端渲染,pipeline
- 负载均衡: DNS负载均衡、IP负载均衡、反向代理负载均衡等
Content-Type
application/x-www-form-urlencoded 表单发包
multipart/form-data 用在发送文件的POST包
raw 可以上传json,xml,文本等
https
在http加入SSL层,是https安全的基础 数据传输之前双方的身份验证、协商加密算法、交换密钥
SSH
非对称性加密,包括传输层,用户认证和连接协议
MD5
MD5加密输出是32位字符串
1.SSL是一个独立的安全套层加密协议;位于TCP(应用层)和IP(网络层)之间;只是起到将数据加密和验证作用;
2.SSH有加密,连接和认证功能,也是一种协议;
3.md5只是简单讲数据加密传输或者被存贮到数据库;
4.最本质的区别:SSL,SSH是一个协议,而md5是一种数据加密方式
原生http请求: 超文本传输协议
1 | let xhr = new XMLHttpRequest() |
200: 请求已经成功,请求所希望的响应头或者数据体将随着此响应返回
202: 服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了
204: 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息
304: 被请求的资源内容没有发生更改
400: 包含语法错误,无法被服务器解析
403: 服务器已经接收请求,但是拒绝执行
404: 请求失败,请求所希望得到的资源未在服务器上发现
408: 请求超时。客户端可以再次提交这一请求而无需任何修改
500: 服务器内部错误,无法处理请求
502: 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效响应
504: 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应