为何finnhub.io请求每次返回相同响应,仅刷新页面才更新?
问题原因分析
1. Finnhub 接口重复返回相同响应的核心原因:HTTP 缓存
Finnhub 的 API 响应头大概率设置了强缓存规则(比如 Cache-Control: max-age=xxx 或 Expires),Node.js 中的 Axios 默认遵循 HTTP 缓存机制——第一次请求后,响应会被本地缓存,后续相同 URL 的请求直接读取缓存内容,不会真的发送请求到 Finnhub 服务器。
而你刷新页面时,浏览器会自动添加 Cache-Control: no-cache 这类请求头,强制服务器返回最新数据、绕过本地缓存,所以能拿到新价格;但刷新后的重复调用又回到默认缓存逻辑,因此还是旧数据。
2. Polygon.io 接口每次响应变化的原因
Polygon.io 虽然提供的是延迟15分钟的数据,但它的 API 没有设置长时效的缓存规则,或者缓存时间极短。每次请求都会直接向服务器发起,而服务器那边的延迟数据是持续更新的(比如每分钟刷新一次延迟版本),因此你每次请求都能拿到当前最新的延迟数据,自然响应会变化。
解决 Finnhub 缓存问题的方案
在 Axios 请求中添加禁用缓存的请求头,强制每次请求都从服务器获取最新数据:
ApiRequest = function () { const currentPriceURL = `https://finnhub.io/api/v1/quote?symbol=SPY&token=` + API_KEY; axios.get(currentPriceURL, { headers: { 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Expires': '0' } }) .then(response => { var price = response.data.c; console.log("price= " + price); }).catch(error => console.error(`Error: ` + error)); } let DisplaySpyPrice_Timer = setInterval(ApiRequest, 1000);
另外需要注意:Finnhub 有请求频率限制,每秒1次的请求频率可能触发限流,建议查看它的官方规则调整请求间隔,避免被封禁。
内容的提问来源于stack exchange,提问作者Seth Schaffner
相关产品推荐
相关产品推荐

