我如何知道(在服务器端)是否有人从iframe或直接访问它?看到里面


How do I know (on the server side) if someone came to it from an iframe or directly? See inside

假设我有一个URL为site.com的网站。我怎么知道如果一个推荐人得到我的URL从iframe,像这样:<iframe src="http://site.com"></iframe>或referer点击(!! !)这个链接在某些站点,其中链接是一个通常的a标签:<a href="http://site.com">go to site</a> ?

我想在服务器端区分这两个。也许,有一种方法可以通过JS?

可以在javascript中完成,但不能直接在服务器端完成。但是,您可以通过以下两种情况之一的重定向将此信息传递给服务器:

if (window.self === window.top) {
  // you're not in an iframe
} else {
  // in an iframe (or other frames), act accordingly
}

可选的,如果你只是想阻止你的网站在iframe中被查看,你可以通过发送X-Frame-Options头来做到这一点

Javascript仅是客户端(除非您使用Node.js),所以没有办法告诉服务器端是否从iframe或普通超链接引用的东西。

你想做这件事的原因是什么?看来你得另想办法解决你的问题了。

如果你想阻止你的网站在iframe中显示,最好的方法之一就是使用破框脚本。(请注意,请求/响应仍然会在您的web服务器上发生)。

在你不希望被"裱框"的任何文件的<head>中包括以下内容。

<style id="antiClickjack">body{display:none !important;}</style>
<script type="text/javascript">
   if (self === top) {
       var antiClickjack = document.getElementById("antiClickjack");
       antiClickjack.parentNode.removeChild(antiClickjack);
   } else {
       top.location = self.location;
   }
</script>