网络基础、缓存策略与前端安全
🔐 前端网络优化和安全设计都发生在系统边界:理解协议、缓存和浏览器安全模型,才能避免“看似可用、实际脆弱”。
从 URL 到页面
典型过程:
- 解析 URL 与检查缓存
- DNS 查询获得 IP
- 建立 TCP;HTTPS 还需 TLS 握手
- 发送 HTTP 请求
- 服务端或 CDN 返回响应
- 浏览器解析、加载子资源并渲染
HTTP/2 支持多路复用和头部压缩;HTTP/3 基于 QUIC,减少部分队头阻塞并改善连接迁移。
HTTP 缓存
强缓存
Cache-Control: max-age=...immutable表示有效期内资源不会变化no-store表示不存储no-cache表示可存储,但复用前必须验证
协商缓存
ETag/If-None-MatchLast-Modified/If-Modified-Since
验证未变化时返回 304 Not Modified。
推荐缓存策略
- HTML:短缓存或
no-cache,确保可及时发现新版本。 - 带内容 hash 的 JS / CSS / 图片:
max-age=31536000, immutable。 - API:根据数据时效、用户身份和写操作设计,避免机械缓存。
- Service Worker:明确版本、更新、回退和离线策略。
Vary 会影响缓存键;私有用户数据不得被共享缓存错误复用。
CORS
同源策略限制脚本读取跨源响应。CORS 由服务端通过响应头授权,而不是前端“关闭限制”。
常见头:
Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-HeadersAccess-Control-Allow-Credentials
携带凭据时不能使用通配符源,并需审慎校验允许的 Origin。
XSS
攻击者将恶意脚本注入页面。
防护:
- 默认转义不可信内容。
- 避免直接使用
innerHTML;必须使用时进行可靠净化。 - 富文本采用允许列表过滤。
- 使用 CSP 限制脚本来源。
- Cookie 设置
HttpOnly,降低脚本读取风险。
⚠️ 前端过滤不能替代服务端校验。数据可能从 API、历史存储、导入文件和协作消息等多条路径进入系统。
CSRF
攻击者诱导已登录用户的浏览器向目标站点发送请求。
防护:
SameSite=Lax或StrictCookie- CSRF Token
- 校验 Origin / Referer
- 修改操作使用正确 HTTP 方法,不使用 GET
其他风险
- 点击劫持:CSP
frame-ancestors或X-Frame-Options。 - 依赖供应链:锁定版本、审计依赖、减少安装脚本权限。
- 开放重定向:校验跳转目标。
- 敏感信息泄露:密钥不得进入前端 bundle、日志和 sourcemap。
- 原型污染:谨慎合并不可信对象键。
请求可靠性
- 为请求设置超时和取消机制。
- 仅对幂等操作自动重试,并使用退避与抖动。
- 写操作考虑幂等键。
- 区分网络错误、HTTP 错误和业务错误。
检查清单
- 静态资源采用内容 hash 与长期缓存
- 用户数据不会被公共缓存
- 富文本与 HTML 输入经过净化
- Cookie 配置 Secure、HttpOnly、SameSite
- CSP、CORS 和 CSRF 策略经过验证
- 客户端代码和构建产物不包含密钥