跨源取数据要靠自建代理
一、症状与误判
自己写一个看板(8777)去读官方服务(3010)的数据,页面能连上服务器但拿不到数据,显示的内容要么是假的、要么只来自极少数放行的接口。
容易被当成"前端写得不好 / UI 不够好看",实际是同源政策在拦:隔壁楼的人来拿东西,除非对方明确欢迎,一律拦下。实测该服务只对"模型列表"这一个接口放行,其他全部默认拒绝。
判断动作:先逐个接口试哪些能读通。如果只有个别接口通,问题不在前端代码。
二、解法:加一层同源代理
你的看板 → 你自己的代理 → 官方服务
(同源,放行) (服务器间调用,无同源限制)
看板不直接请求官方服务,而是请求同源的本地代理,由代理在服务端去取官方数据再回传。服务端之间互相调用不受同源政策约束。
落地通常是三件事:写一个小代理脚本(几十行,用系统自带 Python 即可)、把启动脚本从静态文件服务器换成这个代理、然后前端再谈样式与图表。
三、连带的产品权衡
走代理之后,原本每次都要手动输入的 API Key 可以存在代理侧,打开看板就有数据。代价是密钥落在本地文件里 —— 这是「免密便利」与「手动输入更保险」之间的选择,属于需要用户本人拍板的安全取舍,不能替他默认。
相关
- 先分清平台错误还是应用错误(同为先定位故障层)
- 零延迟零尝试说明请求没发出去(另一类"看起来是网络,其实是本地")
- 先定位归属层再动手 —— 本条是该骨架的一处实例