提问人:Victor Dombrovsky 提问时间:1/19/2018 最后编辑:Lajos ArpadVictor Dombrovsky 更新时间:1/21/2018 访问量:2442
浏览器解析相对 URL,就好像它们是绝对的一样
Browser resolves relative urls as if they were absolute
问:
问题定义
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 (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;模式=块
- 来自应用程序 #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:快递
答:
的 URL
main.1234.js
从您的页面所在的位置开始。的 URL
/main.1234.js
从 baseurl 的位置开始。您可能指的是 baseurl。如果你的路径是 foo/bar/mypage,那么链接main.1234.js将在 foo/bar/ 中搜索文件。如果在开头加上斜杠,它将在 baseurl 中搜索文件,该文件应该是根文件夹。
评论
RolandStarke给了我一个建议,帮助我解决了这个问题。
此外,可以在此处找到对该行为的解释。
若要使相对 URL 正常工作,需要使用结束斜杠。我在应用程序 #2 的链接中使用了它,但没有在应用程序 #1 的链接中使用了它。添加结束斜杠后,一切开始正常。
- 因此,此链接无法正常工作:
www.xxx.com/app
- 但是这个带有结尾斜杠的确实按预期工作:
www.xxx.com/app/
评论
src="/main.1234.js"></script>