96SEO 2026-08-03 12:35 16
使用者痛点一:API Key 暴露在前端,安全性极低。

使用者痛点二:流式数据需要手动处理 ReadableStream、二进制解码、SSE 前缀解析,代码复杂度爆表。
使用者痛点三:业务需求变化时每次都要改前端代码并重新打包发布。
产品经理轻描淡写地说:“咱们要加一个 AI 聊天功能。而且要流式输出,就像 ChatGPT 那样打字机效果。” 我盯着 DeepSeek 的 API 文档陷入沉思:
fetch 硬接流式数据?话说回来,那代表着我要在前端手动处理 ReadableStream解码二进制、解析 data: 前缀、拼接碎片化文本…,不过,光是想想这些,血压就上来了。这不合理。
理想方案:前端只关心 UI 和交互,所有跟“流”相关的脏活累活全部交给中间层去搞定。这个中间层既能藏住密钥,又能转发流式数据。还能随时 新能力——就是为前端配一个“御用翻译官”。于是BFF走进了我的视野。当 BFF 碰上 SSE,所有问题都迎刃而解。
BFF即“为前端服务的后端”。在传统架构里前端直接调 Java/Go 等通用接口,但这些接口往往不够“体贴”。至于常见问题包括,
BFF 的位置如下:
前端 → Node → 后端
BFF 由前端团队维护。前端需要什么格式,BFF 就返回什么格式。其实,于给 Java 大后端配了个“自己人”,好说话。其实,
SSE/Streaming 对前端有四大痛点:
If se responsibilities are left to front end。bundle size inflates and code becomes hard to maintain.
BFF 把脏活累活搬到服务端,只留下一个 fetch/SSE 接口给 UI 使用,这就是它的价值所在。说起来,
// server.mjs
import * as dotenv from 'dotenv';import express from 'express';按理说,dotenv.config;话说回来,const app = express;const port = process.env.PORT || 3000;// 健康检查
app.get => {
res.send;}),app.listen => {
console.log;}),
dotenv.config: 将 .env/.env.local 中的
-
express: 轻量 HTTP 框架,用来快速搭建路由。
-
app.get : 健康检查路由,方便验证服务是否正常运行。
-
app.listen: 与 Vite 开发服务器完全隔离,各自独立进程。
启动方式:
# Terminal 1
node server.mjs
# Terminal 2
npm run dev # 启动 Vite 前端
/stream 路由承担三件事:
prompt
// server.mjs - 添加路由
app.get => {
const { prompt } = req.query;const endpoint = 'https://api.deepseek.com/v1/chat/completions';// 设置 SSE 响应头,让浏览器识别为事件流
res.setHeader;res.setHeader;res.setHeader;try {
const response = await fetch(endpoint,{
method这方面,'POST',headers: {
Authorization: `Bearer ${process.env.VITE_DEEPSEEK_API_KEY}`。'Content-Type': 'application/json',},body: JSON.stringify({
再看model,'deepseek-v4-flash',messages:,stream: true,}),});if {
throw new Error;}
// 将 DeepSeek 返回的 ReadableStream 按块读取并转发
const reader = response.body.getReader;const decoder = new TextDecoder;不过,while {
const { done。value } = await reader.read;if break,// DeepSeek 使用 SSE 格式,每块都是类似 "data: {...}
"
const chunk = decoder.decode;// 简单转发原始块给浏览器
res.write;
}
res.end,// 完成后关闭连接
} catch {
console.error;// 将错误以 SSE 格式发送回前端
res.write}
`);res.end,}
});
Coding 解读:
const { prompt } = req.query; 从查询字符串中拿到使用者输入,例如 /stream?prompt=你好 .Content-Type: text/event-stream `。浏览器会自动触发 `MessageEvent` 回调,实现实时展示。The browser enforces Same‑Origin Policy – only when protocol,hostname and port match is a request considered same‑origin. In our case:
\
l i>方式三:反向代理 阶段使用 Vite proxy;生产阶段使用 Nginx/云网关。这是最推荐方法,因为它对 front‑end 完全透明 且不需要额外 CORS 配置。其实,\
1️⃣ 前端请求同源地址。例如 /api/stream?...
2️⃣ Vite 开发服务器捕获该请求,根据配置将其转发至真实目标 http://localhost:3000/stream?...
3️⃣ 响应经 Vite 再回传给浏览器 → 浏览器始终感知为同源,无跨域报错。
javascript // vite.config.js import { defineConfig } from 'vite';import vue from '@vitejs/plugin-vue';
export default defineConfig({ plugins:,server: { 说到proxy,{ '/api'的观点是,{ 再看target。'http://localhost:3000',// BFF 地址 changeOrigin: true,rewrite: path => path.replace,// 去掉 /api 前缀 },},},});
'/api': 匹配所有以 /api 开头的请求方法。l i>target: 真正的后端地址,这里指向本地 BFF。l i>changeOrigin:true: 将请求头中的 Origin 改为目标地址,以免后续 CORS 检查失败。l i>rewrite: 把 /api/stream 重写成 /stream 因为 BFF 没有 /api 前缀。\E.g.:
Front -> /api/stream?prompt=hello
↓ proxy ➜ http://localhost:3000/stream?按理说,prompt=hello
← stream response ←
Front receives same‑origin SSE data ✅
相比之下 Vite Proxy只在本地开发有效;生产环境我们交给 Nginx 做统一代理,两套规则保持一致。
nginx
location /api/ { proxypass http://localhost:3000/;# 注意末尾 / proxysetheader Host $host;proxysetheader X-Real-IP $remoteaddr;
# 对于 SSE 必须关闭缓冲,否则会等完整响应才发送给客户端
proxy_buffering off;proxy_cache off;
}
/api/。所以 /api/stream 被转发到 /stream.
li>proxybuffering off :关闭 Nginx 默认缓冲,让 SSE 数据实时透传,不会出现卡顿。\
这样无论是本地还是线上。都统一使用 调用,无需更改任何 Vue 源码。
...
Sorry due to length constraints I cannot continue furr.
。作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback