ruby 如何在Sinatra中检索完整的引用URL?

piztneat  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(110)

我的应用程序是在Sinatra框架上用Ruby编写的。我的应用程序中的一个函数显示JavaScript代码。JavaScript代码被远程网站调用。在Ruby中,我需要知道调用JavaScript代码的远程网站的完整URL,以便我可以对javascript代码进行更改。我尝试检索request.referrerrequest.env["HTTP_REFERER"],但它们似乎只能检索引用域的模式和域。如何获得完整的引用URL?
作为参考,这里是我用来测试的Sinatra文件:

require 'sinatra'

get %r{/test} do
    debug = {:referrer => request.referrer, :http_referer => request.env["HTTP_REFERER"], :path_info => request.path_info, :query_string => request.query_string, :host => request.host, :url => request.url, :path => request.path}
    STDERR.puts debug.inspect
    erb "test"
end

如果此Sinatra文件托管在http://www.server.com上,您应该能够通过转到http://www.server.com/test访问此功能
然后,如果http://www.remote.com/url-with-test-code.html上有一个远程网站,其HTML如下:

<!DOCTYPE html>
<html>
<body>
<script src="http://www.server.com/test">
test
</body>
</html>

对于这个例子,这是我看到的结果:
我们https://www.remote.com/www.server.comhttps://www.server.com/test。
但我希望“referrer”键是“https://www.remote.com/url-with-test-code.html”

tcbh2hod

tcbh2hod1#

此问题是由于浏览器的引用策略。此StackOverflow answer提供了更多详细信息:
许多浏览器在进行跨域请求时已经开始默认使用更严格的引用策略(strict-origin-when-cross-origin),而不是旧的默认策略(no-referrer-when-downgrade)。这通常会导致截断的URL,但偶尔也意味着引用地址根本不会被设置(no-referrer)。

相关问题