【问题标题】:Browser resolves relative urls as if they were absolute浏览器解析相对 url,就好像它们是绝对的一样
【发布时间】: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. 来自应用程序 #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;模式=块
  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 哇!结束斜线确实有帮助!从没想过这很重要。您能否发表评论,为什么它很重要以及它如何影响行为?如果您发表评论作为答案,我会接受。谢谢!

标签: javascript java url browser client-side


【解决方案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/

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 2018-07-14
    • 2018-07-18
    • 2012-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多