JavaScript无法直接跨域请求RSS,需通过RSS2JSON等CORS友好API转为JSON处理,或自建服务端代理解析XML;推荐优先使用RSS to JSON服务以简化开发并提升可靠性。

JavaScript 本身不能直接跨域请求 RSS(通常是 XML 格式),尤其在浏览器环境中受同源策略和 CORS 限制;但可通过服务端代理或使用支持 CORS 的 RSS 聚合 API(如 RSS2JSON)间接获取并解析。现代方案多将 RSS 转为 JSON 后处理,更简单可靠。
使用 RSS2JSON 等第三方 API 获取 JSON 化数据
RSS2JSON 是免费、无需鉴权、支持 HTTPS 的常用服务,把 RSS 地址转为标准 JSON,便于 JavaScript 直接消费:
- 请求地址格式:
https://api.rss2json.com/v1/api.json?rss_url=URL_ENCODED_RSS_URL - 需对原始 RSS URL 进行
encodeURIComponent()编码(例如https://example.com/feed.xml→https%3A%2F%2Fexample.com%2Ffeed.xml) - 响应结构包含
items数组,每项含title、description、pubDate、link等字段,可直接遍历渲染
示例代码:
async function fetchRssFeed(rssUrl) {
const encodedUrl = encodeURIComponent(rssUrl);
const apiEndpoint = `https://api.rss2json.com/v1/api.json?rss_url=${encodedUrl}`;
try {
const res = await fetch(apiEndpoint);
const data = await res.json();
if (data.status !== 'ok') {
throw new Error(data.message || 'RSS 解析失败');
}
return data.items; // 返回已解析的条目数组
} catch (err) {
console.error('加载 RSS 失败:', err);
}
}
// 使用
fetchRssFeed('https://hacks.mozilla.org/feed/')
.then(items => {
items.forEach(item => {
console.log(item.title, item.link);
});
});
浏览器中直接请求原始 RSS XML(仅限同源或服务端配合)
若 RSS 源与当前页面同源,或你控制后端,可直接用 fetch 请求 XML 并手动解析:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 设置
response.headers.get('content-type')确认返回的是application/rss+xml或text/xml - 用
response.text()获取 XML 字符串,再用new DOMParser().parseFromString(xmlStr, 'text/xml')解析为 XML 文档 - 通过
querySelectorAll('item')遍历条目,再用textContent提取title、link、pubDate等子元素内容
注意:多数公开 RSS 源不支持跨域(无 Access-Control-Allow-Origin),直接请求会触发 CORS 错误 —— 此时必须走代理。
自行搭建轻量代理(Node.js Express 示例)
为绕过浏览器 CORS,可在自己服务器上写一个反向代理接口:
// server.js(Express)
const express = require('express');
const axios = require('axios');
const app = express();
app.get('/proxy/rss', async (req, res) => {
const { url } = req.query;
if (!url) return res.status(400).send('缺少 url 参数');
try {
const rssRes = await axios.get(url, {
headers: { 'User-Agent': 'Mozilla/5.0' }, // 部分 RSS 站点要求 UA
timeout: 10000,
});
res.set('Content-Type', rssRes.headers['content-type'] || 'application/rss+xml');
res.send(rssRes.data);
} catch (err) {
res.status(502).send('RSS 加载失败:' + err.message);
}
});
前端调用:fetch('/proxy/rss?url=' + encodeURIComponent('https://example.com/feed.xml')),再用 DOMParser 解析响应文本。
注意事项与替代建议
原生 RSS 解析在前端较脆弱,推荐优先考虑以下方式:
- 使用成熟 RSS to JSON 服务(如 RSS2JSON、API4RSS),省去解析逻辑和兼容性问题
- 避免在客户端硬编码 UA 或重试逻辑,交由服务端统一处理
- RSS 时间字段(
<pubDate>)格式不一,建议用Date.parse()或luxon/date-fns做标准化 - 部分 RSS 含 CDATA 内容(如 HTML 描述),提取
description后建议用DOMPurify.sanitize()防 XSS
不复杂但容易忽略:RSS 源可能失效、重定向、返回 403,加个 loading 状态和错误 fallback 更友好。

















