javascript - 使用隐私浏览时如何从其公共端点提取 Reddit 数据?
问题描述
使用 Firefox 的隐私浏览模式时,我无法使用 AJAX 从公共 Reddit API 中提取数据。该代码在不处于隐私浏览模式时工作正常。
通过公共 API,我指的是https://reddit.com/r/funny/.json之类的端点。请 注意,如果您尝试直接访问此链接,则此链接将在常规或私人浏览模式下均有效。但是,使用来自 AJAX 的相同链接在隐私浏览模式下不起作用,如以下代码所示:
var url = "https://www.reddit.com/r/funny/.json?limit=4";
$.ajax({
type: 'GET',
url: url,
dataType: 'jsonp',
success: function(data) { $('#foo').append('<p>Success!</p>'); },
error: function() { $('#foo').append('<p>Failure!</p>'); },
jsonp: 'jsonp'
});
JSFiddle 链接 (在常规和私人浏览窗口中尝试)
我想也许 JSONP 在这种情况下会有所帮助,但情况似乎并非如此,或者我只是做错了。JSONP 文档似乎非常稀少,尤其是与 Reddit API 相关的文档。
解决方案
Firefox 在发送请求时在控制台显示的错误是:
“https://www.reddit.com/r/funny/.json?limit=4&jsonp=jQuery400175737938774993335244664702950021422623963_1631658838396&_=1631658838397”的资源被阻止,因为内容阻止已启用。
根据disconnect.me的列表,在私有模式或启用增强跟踪保护的情况下,Firefox 72 及更高版本将阻止第三方对某些域的请求,该列表可以在 GitHub 上找到。
reddit.com 是这些域之一,被归类为“FingerprintingGeneral”和“Social”。根据Mozilla 博客中的脚注:
Disconnect 阻止列表中的跟踪器是“广告”、“分析”、“社交”、“内容”或“断开连接”类别中的任何域。指纹识别器是指纹类别中的任何域。Firefox 会阻止这两个分类交集的域,即,一个域既属于跟踪类别之一,也属于指纹类别。
(强调,这些是适用于这里的分类)
显示该内容以使其在 Firefox 和其他具有类似跟踪保护的浏览器中也能工作的最安全选择可能是从您自己的 API 后端获取数据,而不是直接从前端向 Reddit 发送请求。
或者,如果这不是一个选项,您可以添加良好的错误处理并要求您的用户为您的网站禁用增强跟踪保护,以查看他们错过的内容。
推荐阅读
- ruby-on-rails - 复制/克隆 ActiveStorage 属性
- c# - AWS S3 存储 ObjectLockRetention
- spring - Spring JPA:BeanCreationException - 由 AbstractMethodError 引起
- pulumi - 如何在创建“VirtualNetwork”对象后知道的pulumi中异步使用子网ID?
- java - Maven导入的Gson类部署在JSP和Servlet Java Web上找不到
- java - 如何获取在给定时间后发送的聊天 ID 的聊天消息?
- linux - AWS Linux2 上的应用程序日志
- powershell - 使用 Powershell (rawattributes) 获取 IIS HTTP 响应标头
- oracle - Oracle: ORA-01031: 权限不足
- python - 如何从 pytest 的类内部执行测试?