浏览器将相对URL解析为绝对

时间:2018-01-19 12:07:30

标签: javascript java url browser client-side

问题定义

在我的页面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/(app#1)
  • www.xxx.com:82/(app#2)

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

但我的设置有点复杂。我的目标是将app#2隐藏在任何公共访问中,并仅通过app#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)的回复,其中浏览器错误地解析了网址:
  2.   
        
    • 缓存控制:私人
    •   
    • 的Content-Length:775
    •   
    • 的Content-Type:text / html的;字符集= UTF-8
    •   
    • 日期:星期五,2018年1月19日11:34:40 GMT
    •   
    • 到期日:周一,1970年1月1日00:00:00 UTC
    •   
    • 设置Cookie:zimidy-initialSessionIdHash = -226086716;路径= /
    •   
    • Strict-Transport-Security:max-age = 31536000; includeSubDomains
    •   
    • X-的Content-Type-选项:nosniff
    •   
    • X框-选项:SAMEORIGIN
    •   
    • X-XSS-保护:1;模式=块
    •   
    1. 来自应用#2(www.xxx.com:82/page)的回复,其中浏览器正确解析了网址:
    2.   
          
      • 接受-范围:字节
      •   
      • Cache-Control:public,max-age = 0
      •   
      • 连接:保活
      •   
      • 日期:星期五,2018年1月19日11:33:16 GMT
      •   
      • ETag的:W / “307-1610e1964c4”
      •   
      • 最后修改时间:2011年1月19日星期五,格林威治标准时间11:06:40
      •   
      • X供电-通过:快递
      •   

2 个答案:

答案 0 :(得分:0)

的网址

main.1234.js

从您网页所在的位置开始。

的网址

/main.1234.js

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

答案 1 :(得分:0)

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

此外,可以找到行为的解释here

要使相对URL正常工作,需要结束斜杠。我在app#2的链接中使用它,但不在app#1的链接中。添加结束斜杠后,一切都开始起作用了。

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