如何在 Sinatra 中制作代理?

Sam*_*ern 0 html ruby proxy sinatra

我想制作一个简单的 Sinatra 应用程序,当我导航到“/proxy/:someurl”时,我会看到直接导航到 :someurl 的确切内容,也就是一个简单的网络代理,有点像一个完整的页面 iframe。

做这个的最好方式是什么?

wil*_*ynn 5

最简单的方法是使用例如 RestClient 并说:

get '/proxy/:url' do |url|
  RestClient.get(url)
end
Run Code Online (Sandbox Code Playgroud)

这将代理任何成功获取的内容。多做一点工作,您就可以通过内容类型和缓存控制标头进行管道传输。再多一点,你可以通过错误代码。然后发帖。然后...

也就是说,我不会进一步帮助您,因为让您的 Web 服务器代理任意内容是一个糟糕的主意。它破坏了作为 Web 安全基础的同源策略。它很慢(占用您的 Web 服务器以等待另一个 Web 服务器)和/或不重要(如果您使用sinatra-async+ em-http-request)。它使您的网络服务器成为一个匿名者,完全招致滥用。只是……不要。

  • 代理任意 URL:bad
  • 从您信任的特定 URL 代理一些内容:可能没问题,但仍然可能不是最佳解决方案。