我的服务器仅在根级别使用带有htaccess重定向的https,如果用户使用http连接从FB页面调用我的选项卡应用程序,则会丢失已签名的请求。 大家都知道解决方案吗? 如何在调用标签时强制Facebook使用https? 谢谢 LUC
答案 0 :(得分:0)
如何在调用标签时强制Facebook使用https?
理论上,应该使用HTTP状态代码307(临时重定向)和308(永久重定向),因为它们要求方法保持不变,因此客户端必须获取已重定向到的资源再次使用相同的数据进行POST。
但是,我没有经验,这对于那里的浏览器有多好。
使用JavaScript可能更好地“重定向”客户端。当然,这需要一个仅使用HTTP的资源,并且不将服务器端重定向到它的HTTPS对应物。
在未来,这个“问题”将自行消失,我认为 - 自去年年底Facebook宣布将把所有用户转移到HTTPS之后;所以我想从现在开始我们不再需要为canvas / page选项卡应用程序提供HTTP URL,而只使用一个HTTPS版本。
答案 1 :(得分:0)
我以这种方式解决了:
在FBapp管理器中,我使用http url作为在接受http的不同服务器上创建的页面。 在这个页面中,我使用了以下代码。
$signed_request = $facebook->getSignedRequest();
$page_id = $signed_request["page"]["id"];
$fql_query_url = "https://graph.facebook.com"
."/$page_id?fields=link"
."";
try {
$fql_query_result = @file_get_contents($fql_query_url);
$fql_query_obj = json_decode($fql_query_result, true);
} catch(Exception $o){ }
$pageinfo = $fql_query_obj[link];
$pageinfo = str_replace("http://","https://",$pageinfo);
$tabpage = "$pageinfo"."?sk=app_$appId";
echo "
<!-- force tab iframe -->
<script type=\"text/javascript\">
top.location.replace('$tabpage');
</script>
";
?>
这就是全部