检查是否可以在iframe中加载网址

时间:2017-06-16 03:01:07

标签: ruby-on-rails ruby iframe

Snip.ly很好地检查输入的网址是否可以在iframe中使用。 我想用红宝石复制它。查看他们的代码,他们向他们的服务器发送一个ajax请求,以及他们在哪里进行验证。

即使经过广泛的谷歌搜索也无法找到任何可以帮助我实现这一目标的东西。

我的用例是,我们允许用户将新闻列表添加到他们的页面,这些列表显示在iframe中,如果输入的网址可以在iframe中使用,则会显示它。

1 个答案:

答案 0 :(得分:0)

您可以通过查看X-Frame-Options标题来弄清楚某些情况。但正如你在评论中提到的,它并不是一直有效。

根据我的经验,最好完全解决问题。 如果您通过rails服务器反向代理您的请求,那么您可以在iframe中随时显示任何内容。

以下是该过程的一个示例。我假设您的服务器是your-server.com,并且用户想要在user.com/list上列出一个页面。它的工作方式是:

  1. 将iframe的src设置为https://your-server.com/proxy?url=https://user.com/list`
  2. 拦截请求,提取网址:https://user.com/list
  3. https://user.com/list上执行HTTP请求以获取内容
  4. 将其返回浏览器,就好像它来自您自己的服务器一样
  5. 这种方法几乎一直有效,但它有其他局限性: - 您应该反向代理该页面上具有相对URL的任何资产;否则css / images可能会被破坏 - 您必须在该页面上处理ajax请求

    您也可以通过在第4步之前转换html来解决这些问题。 您可以将https://github.com/waterlink/rack-reverse-proxy用于第2步和第3步,而不是重新实现自己的反向代理。

    您可以使用config/application.rb中的以下代码进行设置:

    config.middleware.insert(0, Rack::ReverseProxy) do  
      reverse_proxy_options timeout: 10 # avoids waiting for pages that take forever to load
      reverse_proxy(/proxy\?url=(.*)/, '$1') # reverse proxy on the url parameter
    end