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

Browser resolves relative urls as if they were absolute

提问人:Victor Dombrovsky 提问时间:1/19/2018 最后编辑:Lajos ArpadVictor Dombrovsky 更新时间:1/21/2018 访问量:2442

问:

问题定义

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)

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

但我的设置有点复杂。我的目标是将应用程序 #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. 来自应用程序 #1 (www.xxx.com/page) 的响应,其中浏览器错误地解析了 URL:
  • 缓存控制:私有
  • 长度:775
  • 内容类型:text/html;字符集=UTF-8
  • 日期:Fri, 19 Jan 2018 11:34:40 GMT
  • 到期:Thu, 01 Jan 1970 00:00:00 UTC
  • 设置 Cookie:zimidy-initialSessionIdHash=-226086716;路径=/
  • 严格传输安全:max-age=31536000 ;include子域
  • X-内容类型选项:nosniff
  • X-Frame-选项:SAMEORIGIN
  • X-XSS保护:1;模式=块
  1. 来自应用程序 #2 (www.xxx.com:82/page) 的响应,其中浏览器正确解析 URL:
  • 接受范围:字节
  • 缓存控制:公共,最大年龄=0
  • 连接方式:keep-alive
  • 日期:Fri, 19 Jan 2018 11:33:16 GMT
  • ETag:W/“307-1610e1964c4”
  • 最后修改时间:Fri, 19 Jan 2018 11:06:40 GMT
  • X-Powered By:快递
JavaScript Java URL 浏览器 客户端

评论

0赞 Marventus 1/19/2018
你试过吗?src="/main.1234.js"></script>
1赞 Roland Starke 1/19/2018
URL 已正确解析。注意此处的尾部斜杠:www.xxx.com/page -> www.xxx.com/page/
0赞 Victor Dombrovsky 1/19/2018
@RolandStarke 哇!结束斜杠确实有帮助!从没想过这很重要。您能评论一下为什么它很重要以及它如何影响行为吗?如果您将您的评论作为答案发布,我将接受它。谢谢!

答:

0赞 Lajos Arpad 1/19/2018 #1

的 URL

main.1234.js

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

/main.1234.js

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

评论

0赞 Victor Dombrovsky 1/21/2018
这正是我所期望的。但它的工作方式不同,这就是我问这个问题的原因。实际上,RolandStarke给出了一个答案,这有助于解决问题。无论如何,感谢您的回答!
0赞 Victor Dombrovsky 1/21/2018 #2

RolandStarke给了我一个建议,帮助我解决了这个问题。

此外,可以在此处找到对该行为的解释。


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

  • 因此,此链接无法正常工作:www.xxx.com/app
  • 但是这个带有结尾斜杠的确实按预期工作:www.xxx.com/app/