You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现API仅支持服务端调用、禁止客户端访问?附Google RSS跨域案例

如何实现API仅允许服务端调用,禁止客户端访问?

核心实现方案

以下是几种常用的限制手段,结合你提到的Google RSS场景逐一说明:

  • 通过CORS策略拦截前端请求
    这就是Google RSS采用的方式:API服务器配置严格的CORS规则,仅允许特定服务端域名发起跨域请求,直接拒绝浏览器带前端Origin头的请求。
    比如在Node.js Express中用cors中间件配置:

    const cors = require('cors');
    app.use(cors({
      origin: 'https://your-server-domain.com' // 仅放行自家服务端域名
    }));
    

    更极端的可以直接禁用OPTIONS预检请求,前端发起跨域请求时,浏览器会先发送OPTIONS请求做预检,服务器直接返回403,前端就会触发CORS错误。

  • 用API密钥限制,仅在服务端存储密钥
    给API设置专属密钥,只把密钥放在服务端环境变量里,绝不暴露给前端。API服务器验证请求头中的密钥,无效或缺失则返回401/403。
    服务端请求示例:

    const axios = require('axios');
    async function fetchData() {
      const res = await axios.get('https://your-api-url.com', {
        headers: { 'X-API-Key': process.env.API_SECRET } // 密钥从环境变量读取,前端无法获取
      });
      return res.data;
    }
    
  • IP白名单限制访问来源
    将API服务器的访问权限限定在服务端的固定IP范围内,只有服务端IP能发起请求,客户端公网IP直接被拦截。
    比如Nginx配置IP白名单:

    location /api {
      allow 192.168.1.100; # 你的服务端IP
      deny all;
      proxy_pass http://your-api-backend;
    }
    

    云服务器环境也可以通过安全组配置IP白名单,更便捷。

  • 后端代理中转请求
    就像你用Node.js访问Google RSS的方式:前端不直接调用目标API,而是请求自家服务端,由服务端作为代理去调用目标API,再把结果返回给前端。
    Express代理示例:

    const { createProxyMiddleware } = require('http-proxy-middleware');
    app.use('/rss-proxy', createProxyMiddleware({
      target: 'https://news.google.com/rss',
      changeOrigin: true,
      pathRewrite: { '^/rss-proxy': '' }
    }));
    

    前端只需请求/rss-proxy,全程接触不到目标API的地址和权限信息,自然避开了CORS限制。

关于Google RSS的场景说明

Google RSS的API服务器配置了严格的CORS规则,浏览器发起跨域请求时会自动携带Origin头,服务器检测到是前端域名后直接拒绝;而服务端请求不受浏览器同源策略限制,也不会触发CORS预检流程,因此能正常访问。

内容的提问来源于stack exchange,提问作者rionalab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:22:14