当前位置: 首页 > news >正文

前端 vs 后端请求:核心差异与实战对比

1. 一句话速记

维度前端后端
核心差异浏览器沙箱限制服务器进程自由
一句话同源策略约束的 HTTP 调用不受同源策略约束的任意协议网络调用

2. 四维原理对比(详细版)

维度前端后端备注 / 示例
发起者浏览器渲染进程里的 JS 引擎Node、Java、Go、Python…SSR 时 Node 代码仍算后端请求
协议 / 库fetchXMLHttpRequest、WebSockethttp(s)netgrpcmysqlredisaxiosrequestcurl浏览器无法直接发 TCP/UDP
安全限制1. 同源策略 (scheme+host+port)
2. CORS 预检 OPTIONS
3. CSP
4. Cookie SameSite
浏览器级限制,仅受服务器防火墙/ACL 控制后端可携带任意 Header、私钥、SSH Key
身份凭证• 浏览器自动带 Cookie / Basic Auth
• 手动塞 JWT / Token 到 Header
• 自定义 Token、OAuth2、Service Mesh mTLS
• 数据库口令、Redis AUTH
后端可缓存长连接、连接池复用

3. 案例:登录 + 拉取并缓存天气

3.1 场景描述

  1. 用户在前端输入账号密码登录。
  2. 前端仅需要“上海”天气。
  3. 后端为了后续推荐,需要静默把“北京、广州、深圳”天气写入 Redis 缓存。

3.2 时序图(Mermaid)

用户浏览器后端 Node天气 APIRedis输入账号密码POST /api/login (带 Cookie)Set-Cookie: jwt=xxxGET /weather?city=shanghai (带 JWT)上海天气 JSONGET /weather?city=beijing (Service Token)GET /weather?city=guangzhouGET /weather?city=shenzhenSETEX beijing 300 {...}SETEX guangzhou 300 {...}SETEX shenzhen 300 {...}par[后台并行]用户浏览器后端 Node天气 APIRedis

4、安全限制(Security Boundaries)


  1. 底层原理:同源策略 Same-Origin Policy(SOP)
    • 定义:scheme + host + port 三元组完全一致才视为同源。
    • 作用域:DOM 访问、Cookie、LocalStorage、IndexedDB、fetch/XHR、WebSocket。
    • 设计目标:防止恶意站点读取其他站点的敏感数据(而不是阻止发请求)。

  2. 浏览器实际行为
    ┌─────────────┬──────────────┬──────────────┐
    │ 场景 │ 请求能否发出 │ 响应能否被 JS 读取 │
    ├─────────────┼──────────────┼──────────────┤
    │ 简单 CORS │ ✅ │ ✅(需 ACAO 头) │
    │ 带预检 CORS │ ✅(两次) │ ✅(需 ACAC 头) │
    │ no-cors │ ✅ │ ❌(opaque) │
    └─────────────┴──────────────┴──────────────┘

  3. 攻防视角
    • CSRF:利用“请求能发出去”的特点,让浏览器携带 Cookie 完成敏感操作。
    防护:SameSite=Lax/Strict、双重 Cookie、Token 在 Header。
    • XSS + SOP 绕过:通过 <script src> / <img> 标签天然不受 SOP 限制,窃取 JSONP 响应。
    • Spectre / 侧信道:借助高精度计时器读取跨源渲染像素 → 浏览器降低 SharedArrayBuffer 精度、COEP/COOP。

  4. 调试技巧
    • 浏览器 DevTools → Network → 查看 Access-Control-Allow-Origin 与预检 OPTIONS。
    chrome://flags/#disable-web-security临时关闭 SOP(仅本地调试)。
    curl -H "Origin: http://evil.com" 快速验证后端 CORS 配置。

================================================================

5、身份凭证(Identity Credentials)


浏览器与服务器在“谁能带什么、怎么带”上截然不同,可用下图概括:

浏览器:Cookie(自动)  └─ SameSite、Secure、HttpOnly  JWT / Token(手动放到 Header/Body)  
服务器:任意 HTTP Header(Authorization、X-Api-Key)  mTLS 双向证书  私网协议(Redis AUTH、MySQL 用户名密码、SSH Key 等)

5.1. Cookie 全景

• 属性速查表
Set-Cookie: sessionId=abc; Path=/; Domain=.foo.com; Secure; HttpOnly; SameSite=Lax; Max-Age=3600
• 生命周期
① 浏览器收到响应头 → 写入 Cookie 仓库
② 后续同源请求自动带 Cookie:
③ JS 无法读取 HttpOnly Cookie,可缓解 XSS 盗取。

• SameSite 行为矩阵
SameSite=Strict 仅同站导航携带 SameSite=Lax 顶级导航 GET 可带(默认 2022+) SameSite=None 任意跨站都带,必须 Secure

• 典型攻击
- CSRF:跨站 POST 自动带 Cookie → 后端需 Token 二次校验。
- 会话固定:登录前把 Cookie 注入到浏览器 → 登录后劫持会话。

5.2. Token / JWT

• 存储位置
- WebStorage(localStorage/sessionStorage):易受 XSS 窃取。
- Cookie(双 Cookie):防 XSS,但仍需防 CSRF。
- Memory:SPA 单页刷新丢失,需配合 refresh_token。
• 传输位置
- Authorization: Bearer <jwt>(前端手动)
- 或签在 Cookie 里(前端不碰,后端解析)。

5.3. 服务器端凭证

• Service-to-Service Token(OAuth2 Client Credentials Grant)
• mTLS:客户端证书自动带在 TLS 握手,无需应用层处理。
• 连接池复用:后端可长期保存数据库密码、Redis AUTH,浏览器做不到。

5.4. 调试 & 审计

• 浏览器:Application → Cookies → 查看属性 & 是否 HttpOnly。
• 后端:
curl -H "Authorization: Bearer $TOKEN" \ -H "Cookie: sessionId=abc" \ https://api.foo.com/user
• 日志:记录 X-Forwarded-ForUser-AgentAuthorization 前缀(脱敏后)。

一句话总结

  • 浏览器只能在“同源沙箱”里玩,携带的凭证要么 Cookie(自动),要么手动塞 Token;
  • 服务器处于“网络终端”,想发什么协议就发什么协议,想带什么凭证就带什么凭证,但必须自己做好鉴权、加密、审计。

5.6 Cookie和Token对比

维度CookieToken(以 JWT 为例)
存储位置浏览器提供的 Cookie 存储区(随请求由浏览器 自动 携带在 Cookie 头)。由前端 主动 保存:可放 Cookie、localStoragesessionStorage、内存等。
携带方式浏览器 自动 把同域 Cookie 附加到每一次 HTTP 请求(包括图片、CSS 等)。前端 手动 加到请求头,如 Authorization: Bearer <token>
大小限制单个 Cookie ≤ 4 KB,每个域名 ≤ ≈180 个(浏览器差异)。只受 URL 长度或服务器配置限制(一般 < 8 KB)。
安全性默认携带,CSRF 风险;可设置 HttpOnly/Secure/SameSite 缓解。不自动带,天然防 CSRF;但如存 localStorage 会受 XSS 威胁。
跨域同源策略 限制,可配合 withCredentials / CORS 跨域。只要前端能取到 token,任意域名都可主动带到服务器。
有效期通过 Expires / Max-Age 设置,可持久由服务器签发时决定(exp 字段),可设短/长,或配合 Refresh Token。
服务端校验通常只需检查 SessionId,实际会话数据存 服务端内存 / Redis典型 无状态:服务端仅验证签名即可拿到用户信息(JWT 自包含)。
注销 & 失效直接删除 Cookie 或让 Session 过期即可。需额外机制:黑名单、短有效期+刷新、版本号等。
适用场景传统 Session-Cookie 会话、自动登录、广告追踪。SPA / 移动端 / 微服务、跨域 API 调用、OAuth 2.0、Serverless。

5.7 Cookie、localStorage和sessionStorage对比

维度CookielocalStoragesessionStorage
存储大小4 KB(单条)5-10 MB5-10 MB
生命周期可设置过期时间;默认会话级永久,除非手动删除页面会话级(关闭标签页即清)
作用域同源请求 自动 携带到后端前端 可读写前端 可读写
是否随 HTTP 请求✅ 浏览器 自动 加到 Cookie❌ 不随请求❌ 不随请求
APIdocument.cookie = ...(字符串拼接)setItem / getItem / removeItem / clear同 localStorage
安全性默认带 CSRF 风险;可 HttpOnly 防 JS 访问XSS 威胁XSS 威胁
主要用途登录态、跟踪、偏好本地离线数据、缓存页面内临时数据
跨标签页共享✅ 同源共享✅ 同源共享❌ 同一标签页内共享
http://www.dtcms.com/a/348600.html

相关文章:

  • Qt——网络通信(UDP/TCP/HTTP)
  • 【Unity开发】Unity核心学习(二)
  • PAT 1081 Rational Sum
  • 【机器学习】8 Logistic regression
  • Power BI切片器自定义顺序
  • 智能油脂润滑系统:给设备一份 “私人定制” 的保养方案
  • Linux 学习笔记 - 集群管理篇
  • 【大模型LLM学习】Data Agent学习笔记
  • C++算法学习专题:二分查找
  • Kubernetes部署Prometheus+Grafana 监控系统NFS存储方案
  • Socket some functions
  • 让机器人“想象”未来?VLN导航迎来“理解力”新升级
  • 每日算法刷题Day64:8.24:leetcode 堆6道题,用时2h30min
  • 解密 Spring Boot 自动配置:原理、流程与核心组件协同
  • 人形机器人——电子皮肤技术路线:压电式电子皮肤及一种超越现有电子皮肤NeuroDerm的设计
  • 深度学习:CUDA、PyTorch下载安装
  • Leetcode 3659. Partition Array Into K-Distinct Groups
  • sqlite创建数据库,创建表,插入数据,查询数据的C++ demo
  • 商密保护迷思:经营秘密到底需不需要鉴定?
  • 对称二叉树
  • 机械学习综合练习项目
  • jar包项目自启动设置ubuntu
  • [论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
  • 服务器硬件电路设计之 SPI 问答(四):3 线 SPI、Dual SPI 与 Qual SPI 的奥秘
  • 春秋云镜 Hospital
  • Vue 3多语言应用开发实战:vue-i18n深度解析与最佳实践
  • 线程包括哪些状态?线程状态之间是如何变化的?
  • yggjs_rlayout框架v0.1.2使用教程 02 TechLayout 布局组件
  • 拿AI下围棋 -- 开源项目leela-zero
  • ​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​