1.输入网址到页面加载完成中间发生了什么
浏览器处理输入信息:用户在浏览器中输入网址,浏览器将网址解析为请求。
发起请求:浏览器根据解析后的信息构建并发送HTTP请求到服务器。
接收响应:服务器接收到请求后,处理并生成响应,将其发送回浏览器。
渲染网页:浏览器接收响应,解析HTML文档,并通过渲染引擎生成用户界面,最终显示网页内容。
2.HTTP协议
3.HTTP协议的发展历程
4.HTTP报文结构
HTTP请求报文:
请求行:包含请求方法(如GET、POST)、URL和HTTP版本。
请求头部:包含主机名、用户代理、语言等。
请求实体:请求中包含的实际数据,例如表单数据或JSON。
HTTP响应报文:
响应状态行:包含HTTP版本、状态码和状态描述。
响应头部:包含内容类型、长度、缓存控制等。
响应实体:实际返回的数据,如HTML文档、图片等。
5.请求方法
(1)安全的方法:不会修改服务器上的数据。
GET:请求数据,通常是读取操作。
HEAD:请求数据的头部信息,通常用于检查资源的有效性。
OPTIONS:询问服务器支持哪些请求方法。
(2)幂等方法:多次请求的效果相同,服务器状态不变。
GET、HEAD、OPTIONS、PUT、DELETE
6.状态码
(1)常见状态码
- 200 - 客户端请求成功
- 301 - 资源转移到其他URL
- 302 - 临时跳转
- 401 - 请求未授权
- 404 - 请求的资源不存在
- 500 - 服务器内部错误
- 504 - 网关或代理服务器不能在规定的时间内获得想要的响应
7.Resultful API
每个URI代表一种资源。
客户端和服务端之间传递资源的表现层(例如JSON)。
通过不同的HTTP请求方法(如GET、POST、PUT、DELETE)对资源进行操作,实现状态转化。
8.常用请求头
9.常用响应头
10.缓存
缓存分为强缓存和协商缓存。强缓存直接根据缓存字段来判断是否使用缓存,而协商缓存需要先判断缓存是否可用,才决定是否使用缓存。
11.Cookie
HTTP/2
HTTPS
场景分析
1.状态码为200就代表一定发起了请求吗?
状态码为200不一定代表该请求经过了一系列完整的HTTP请求的过程,若资源设置了强缓存字段,将会直接从本地读取缓存(from disk cache)。
2.静态资源部署方案
缓存+CDN+文件HASH
3.为什么会有OPTIONS请求
OPTIONS请求用于获知服务端是否允许跨域请求。
ps.跨域指请求的主机名和资源所在的主机名的协议、主机名、端口号三个有任意一个不同的部分,就会发生跨域。
4.跨域的解决方案
代理服务器:将请求转发到目标服务器以绕过跨域限制。
IFrame:使用iframe嵌套不同源的内容。
4.鉴权方案
Session + Cookie:通过服务器端存储会话信息,客户端通过cookie传递会话ID。
JWT(JSON Web Token):在客户端存储用户的身份信息,使用token进行认证和授权。
实战
1、AJAX:
XHR(XMLHttpRequest):用于在后台与服务器交换数据并更新网页部分内容。
Fetch:现代的XHR升级版,基于Promise,支持更简洁的API和更强的功能,如流式处理。
2、网络优化
通过减少请求数量、使用压缩、合并文件、延迟加载等手段提高页面加载速度。
3、稳定性
确保系统能够在不同的负载和故障条件下保持运行,通过负载均衡、冗余和监控等措施提高稳定性。
4、QUIC
一种新型传输协议,结合了TCP的可靠性和TLS的加密,支持更快的连接建立和更高效的数据传输。
0-RTT建联
类似TCP的可靠传输
类似TSL的加密传输,支持完美前向安全
用户空间的拥塞控制,最新的BBR算法
支持h2基于流的多路复用,但没有HTTP的HOL问题
前向纠错FEC类似MPTCP的Connection migration