浏览器解析相对 url,就好像它们是绝对的一样

Posted

技术标签:

【中文标题】浏览器解析相对 url,就好像它们是绝对的一样【英文标题】:Browser resolves relative urls as if they were absolute 【发布时间】:2018-06-28 16:10:53 【问题描述】:

问题定义

在我的页面 www.xxx.com/page 上有一个脚本:

<script type="text/javascript" src="main.1234.js"></script>

浏览器将其重新定位为 www.xxx.com/main.1234.js 而不是 www.xxx.com/page/main.1234.js


有关我的设置的更多详细信息

实际上,在同一台服务器机器上运行着两个应用程序:

www.xxx.com/(应用 #1) www.xxx.com:82/(应用 #2)

该页面实际上存在于应用程序 #2 中,即 www.xxx.com:82/page。如果我直接访问该页面,则一切正常(即浏览器按预期解析链接)。

但我的设置有点复杂。我的目标是从任何公共访问中隐藏应用程序 #2,并使其仅通过应用程序 #1 作为 www.xxx.com/page 可用。为了实现这一点,我设置了应用程序 #1,如果用户请求 www.xxx.com/page,则应用程序 #1 在后台执行对应用程序 #2 的 www.xxx.com:82/page 的请求并将接收到的内容返回给用户。

从用户的角度来看,一切都应该看起来像 www.xxx.com:82/page 的内容位于 www.xxx.com/page 下。它几乎可以工作。唯一的问题是,由于某种原因,浏览器解析了我在“问题定义”中描述的 URL。 如何解决?


补充信息,希望对您有所帮助

我想,答案应该隐藏在响应中。我想,原因是浏览器接收到不同的响应标头。以下是浏览器在这两种情况下收到的标头列表:

    来自应用程序 #1 (www.xxx.com/page) 的响应,其中浏览器错误地解析了 URL:
缓存控制:私有 内容长度:775 内容类型:text/html;charset=UTF-8 日期:格林威治标准时间 2018 年 1 月 19 日星期五 11:34:40 到期时间:周四,1970 年 1 月 1 日 00:00:00 UTC 设置-Cookie:zimidy-initialSessionIdHash=-226086716;路径=/ 严格的传输安全性:max-age=31536000;包括子域 X-Content-Type-Options:nosniff X-Frame-Options:SAMEORIGIN X-XSS-保护:1;模式=块
    来自浏览器正确解析 URL 的应用 #2 (www.xxx.com:82/page) 的响应:
接受范围:字节 Cache-Control:public, max-age=0 连接:保持活动状态 日期:格林威治标准时间 2018 年 1 月 19 日星期五 11:33:16 ETag:W/"307-1610e1964c4" 最后修改时间:格林威治标准时间 2018 年 1 月 19 日星期五 11:06:40 X-Powered-By:Express

【问题讨论】:

你试过src="/main.1234.js"&gt;&lt;/script&gt;吗? url 解析正确。关心这里的斜杠:www.xxx.com/page -> www.xxx.com/page/ @RolandStarke 哇!结束斜线确实有帮助!从没想过这很重要。您能否发表评论,为什么它很重要以及它如何影响行为?如果您发表评论作为答案,我会接受。谢谢! 【参考方案1】:

网址

main.1234.js

从您的页面所在的位置开始。的 URL

/main.1234.js

从 baseurl 的位置开始。您可能指的是baseurl。如果你的路径是 foo/bar/mypage,那么链接 main.1234.js 将在 foo/bar/ 中搜索文件。如果你在开头加上一个斜线,它将在 baseurl 中搜索文件,它应该是根文件夹。

【讨论】:

这正是我所期望的。但它的工作方式不同,这就是我问这个问题的原因。实际上,RolandStarke 评论了一个答案,这有助于解决问题。无论如何,谢谢你的回答!【参考方案2】:

RolandStarke 给了我an advice,帮助我解决了问题。

此外,可以在here 找到有关该行为的说明。


要使相对 URL 正常工作,需要以斜线结尾。我在应用程序#2 的链接中使用了它,但没有在应用程序#1 的链接中使用它。添加结束斜线后,一切都开始工作了。

所以,这个链接不能正常工作:www.xxx.com/app 但是这个带有斜线的结尾确实可以按预期工作:www.xxx.com/app/

【讨论】:

以上是关于浏览器解析相对 url,就好像它们是绝对的一样的主要内容,如果未能解决你的问题,请参考以下文章

相对路径和绝对路径

Java Web中相对路径与绝对路径的分析

django url反向解析

jquery 获取URL相对/绝对路径问题

绝对URL和相对URL

解析什么是绝对定位,相对定位与浮动