我的客户端应用程序使用直接从官方文档URL加载的用于JavaScript的Facebook SDK(https://connect.facebook.net/en_US/sdk.js)并且在初始化期间将CCD_ 1指定为CCD_。
init片段如下所示:
FB.init({
appId: '[redacted]',
cookie: true,
xfbml: false,
version: 'v2.9'
})
Graph API文档在所有示例HTTP请求片段中引用graph.facebook.com
,而不引用z-m-graph.facebook.com
;但是,我已经开始观察对https://z-m-graph.facebook.com/v2.9/
的请求。
端点似乎是在sdk.js
脚本中预先配置的;这是我在sdk.js
中发现的一个片段,当时我在Chrome开发工具的Sources
选项卡下搜索"z-m-graph":
__d("UrlMapConfig", [], {
"www": "www.facebook.com",
"m": "m.facebook.com",
"connect": "connect.facebook.net",
"business": "business.facebook.com",
"api_https": "z-m-api.facebook.com",
"api_read_https": "z-m-api.facebook.com",
"graph_https": "z-m-graph.facebook.com",
"an_https": "an.facebook.com",
"fbcdn_http": "z-m-static.xx.fbcdn.net",
"fbcdn_https": "z-m-static.xx.fbcdn.net",
"cdn_http": "staticxx.facebook.com",
"cdn_https": "staticxx.facebook.com"
});
我无法确定地重现这个配置映射。有时api_
端点使用v2.9
0,有时则不使用。
更新(2017-10-17T15.36+00:00)
re:为什么我关心SDK试图访问与预期不同的Graph API主机?
作为注册/登录体验的一部分,我使用SDK进行Graph API调用。由于此页面的安全性,我遵循OWASP指南并实施严格的内容安全策略(CSP)。
遵循最小权限的安全原则,CSP只允许连接到我希望应用程序需要的主机并从中获取资产。由于z-m-graph.facebook.com
在任何地方都没有被记录或引用,并且graph.facebook.com
在所有示例和指令中都是专门使用的,因此允许graph.facebook.com
,而不允许z-m-graph.facebook.com
。
我很乐意帮助寻找答案/引出以下内容:
- 如何强制SDK始终使用
graph.facebook.com
- 什么是
z-m-graph.facebook.com
- 在哪里可以找到
z-m-graph.facebook.com
的文档 - 是否存在JS SDK可能尝试用于Graph API请求的其他主机?它们是什么
感谢您的光临!
据我所知,有
- graph.facebook.com
- z-m-graph.facebook.com和
- b-graph.facebook.com
Z.M应指零模式,该模式适用于网络提供商允许您免费使用Facebook且数据有上限且无可视媒体的国家(大多数情况下)。Facebook使该模式在发展中国家被广泛采用。注意:free.facebook.com不使用z-m-graph.facebookcom,而是纯HTML文档,因为它的freebasics程序只为非常有限的手机指定HTML而没有JavaScript
B应该是指基本的,我对此不太了解,但似乎与上面的有一些相似之处,或者用于慢速或有限的连接(不太确定)
我注意到,在Facebook应用程序上篡改Whitehat设置时,它们最终都在服务器上的同一个端点(95%的把握),帖子中有相同的身体参数,最重要的是,如果假设你的ISP支持它,如果你在免费模式之间切换,应用程序会切换到z-m(零模式),如果照片没有显示,或者网络速度减慢,有时会切换到b(基本模式)graph.facebook.com当你切换回数据模式时,z-m-graph.facebook.com没有文档,因为很少有开发人员需要它,因为它在尼日利亚非常依赖ISP。在前三大ISP中,只有两个支持facebook z-m图点,所以我不能在其他网络上使用z-m图,所以为它写文档没有意义,但它与其他网络有相似之处。希望这很好为您;)