Javascript和https - GET相对路径的XMLHttpRequest对象 - 协议/端口'继承'?

mr.*_*ane 7 javascript https xmlhttprequest

如果我在Javascript中使用相对路径来从服务器获取页面(在div中显示输出),Javascript是否使用与加载它的页面相同的协议/端口?

例如:

请求父页面https://www.foo.com/bar.php

bar.php上的JS代码:

var turl = "/new_dir/index.php?r="+r;
if(window.XMLHttpRequest){  
    xmlhttp=new XMLHttpRequest();
}else{
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",turl,false);
xmlhttp.send(null);
Run Code Online (Sandbox Code Playgroud)

由于父页面是在端口443上使用https请求并提供的,这是否意味着JS将使用相同的协议和端口将GET请求发送到新页面?或者它会通过端口80上的http发送请求,因为我没有在'turl'变量中指定连接协议?

T.J*_*der 6

它将使用相同的端口和协议,因为您尚未指定任何其他内容.您的URL是RFC-speak中的相对引用,详见RFC的4.2节.(我只是碰巧知道RFC部分参考,因为我刚刚发现了这个关于http/https东西的漂亮技巧.)

所以你的要求

/new_dir/index.php?r=blah
Run Code Online (Sandbox Code Playgroud)

相对于文件

http://www.foo.com/bar.php
Run Code Online (Sandbox Code Playgroud)

解决了

http://www.foo.com/new_dir/index.php?r=blah
Run Code Online (Sandbox Code Playgroud)