小编典典

AJAX请求中的相对URL

ajax

为什么Javascript对相对URL与标准HTML有所不同?考虑以下网址(或浏览至该网址):http
:
//en.wikipedia.org/wiki/Rome。打开Firebug控制台(或另一个Javascript控制台),然后输入以下内容:

var x = new XMLHttpRequest();
x.open("GET", "foo", true);
x.send("bar");

在我的系统下,请求被发送到“
http://en.wikipedia.org/wiki/foo
”。URL中的“罗马”将被忽略。URL(“
http://en.wikipedia.org/wiki/Rome/
”)中带有斜杠的相同请求会将“ foo”附加到完整URL。

这似乎使用Javascript编码正确的URL变得非常困难。是否有任何Javascript库可以帮助解决此问题?

(我之前问过一个类似的问题,但更多的是jQuery特有的,这种情况也会在这里发生。我希望我能通过这个与库无关的问题得到更好的答案。)


阅读 467

收藏
2020-07-26

共1个答案

小编典典

(已更新,使其更具可读性)

这就是相对路径应该如何工作的方式。

假设当前地址是这样的:

绝对: protocol://some.domain.name/dir1/dir2/filename


如果仅指定新文件名“ foo”,则将获得相同的协议,主机和目录,只更改文件名:

相对的: foo

绝对: protocol://some.domain.name/dir1/dir2/foo


如果指定整个路径“ / dir3 / filename2”,则将获得相同的协议和主机名,但具有另一个路径:

相对的: /dir3/filename2

绝对: protocol://some.domain.name/dir3/filename2


您还可以指定主机名“ //another.domain.name/dir5/filename3”,并获得相同的协议,但使用另一个主机,dir和文件名:

相对的: //another.domain.name/dir5/filename3

绝对: protocol://another.domain.name/dir5/filename3


可能令人困惑的是,如果指定的URL指向目录而不是文件,则Web服务器内部可以在URL的末尾添加/。

protocol://some.domain.name/somename

如果“ somename”是目录,则网络服务器可能会将其转换为目录(可能带有重定向)

protocol://some.domain.name/somename/


更新

正如cameron在评论中所说:作为参考,请参阅RFC1808第4部分中的步骤6。

2020-07-26