在 Rails 应用程序中检测 iframe 请求

发布于 2024-11-27 08:19:13 字数 141 浏览 1 评论 0 原文

我有一个 iFrame 工具,它应该以除我的页面之外的其他格式呈现。所以我想检测来自 iFrame 的请求,就像我可以从 iPhone 检测它们一样。这可能吗?

请求标头中是否有我可以使用的特殊提示,或者我可以手动输入吗?

谢谢 马库斯

I have a iFrame tool, which should get rendered in a other format than my page. So I want to detect requests from iFrame like I can detect them from a iPhone. Is this possible?

Is there a special hint in the request header, that I could use, or could I manually enter one?

Thanks
Markus

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黎夕旧梦 2024-12-04 08:19:13

当您收到来自 iPhone 的请求时,将发送一个“用户代理”字符串,如 Mozilla/5.0(iPhone;U;CPU,如 Mac OS X;en)AppleWebKit/420+(KHTML,如 Gecko)版本/3.0 Mobile/1A543a Safari/419.3request.user_agent 变量中。在此字符串中搜索 iPhone 可以告诉您 iPhone 正在访问您的页面。

iframe 是一个 HTML 标记,用于在您的页面中包含其他页面(例如 Facebook 等)按钮使用这个)。这与特定浏览器无关,所有现代浏览器都支持这一点。您无法在服务器端判断您的页面是否在 iframe 内调用。您可以在客户端中使用一些 JavaScript 来查明当前页面是否在 iframe 内,然后向服务器发送通知。

最佳实践是向您的请求添加另一个参数,例如 ?iframe=1 并在控制器中使用此参数。

When you get a request from an iPhone there will be send a "User Agent"-String like Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 in the request.user_agent variable. Searching this string for iPhone can tell you that an iPhone is visiting your page.

An iframe is an HTML tag to include other pages within your page (eg. the Facebook like button uses this). This does not have to to anything with a specific browser, all modern browsers support this. You cannot tell on server side whether your page was called within an iframe or not. You can use some JavaScript in the client to find out if your current page is within an iframe and then send a notice to the server.

Best practice would be to add another paramter to your request like ?iframe=1 and use this param within your controller.

删除→记忆 2024-12-04 08:19:13

一个好的做法是为您的嵌入添加子域。然后,您可以向子域发出请求并评估 request.host。这还允许在使用多个子域时分离控制器/视图中的逻辑。

示例:

iFrame

控制器

  • iframe = request.host.include?("embed-subdomain.domain")

免责声明:如果您使用会话和 CNAME,这可能会变得棘手

A good practice is to add a subdomain for your embeds. Then you can fire requests to the subdomain and evaluate request.host. This also allows for a separation of logic in controllers/views when using multiple subdomains.

Example:

iFrame

  • <iframe src="embed-subdomain.domain.com" /> instead of <iframe src="domain.com" />

Controller

  • iframe = request.host.include?("embed-subdomain.domain")

Disclaimer: This can get tricky if you utilize sessions and CNAMEs

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文