我的应用程序是在Sinatra框架上用Ruby编写的。我的应用程序中的一个函数显示JavaScript代码。JavaScript代码被远程网站调用。在Ruby中,我需要知道调用JavaScript代码的远程网站的完整URL,以便我可以对javascript代码进行更改。我尝试检索request.referrer
和request.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”
1条答案
按热度按时间tcbh2hod1#
此问题是由于浏览器的引用策略。此StackOverflow answer提供了更多详细信息:
许多浏览器在进行跨域请求时已经开始默认使用更严格的引用策略(
strict-origin-when-cross-origin
),而不是旧的默认策略(no-referrer-when-downgrade
)。这通常会导致截断的URL,但偶尔也意味着引用地址根本不会被设置(no-referrer
)。