这是一个SpringBoot网站。 html页面的URL是http://xxxxx/trex/index/并且索引页面中的javascript代码段如下

$(function(){

jQuery.ajax({
    contentType:'application/json;charset=UTF-8',
    type: "POST",
    url: "getSignTypes",
    cache: false,
    dataType: "json",
    success:function(data){
            if(data !== 'NA'){
                console.log(data);
                $('#signType').combobox({
                    valueField:'id',
                    textField:'title',
                    editable:false,
                    data:data,
                    value:data[0].id
                });
            }
    },
    error:function(msg){
        console.log(msg)
    }
});
})


您可以看到我在此ajax请求的url参数中使用了相对路径。我猜因为它是相对URL,所以应该将其转换为http://xxxxx/trex/index/getSignTypes。我在本地进行了测试,是的,它与预期的http://localhost:8088/trex/index/getSignTypes相同。

但是,当我将其部署到UAT时,我发现URL转换为http://hswcfc-trainexp-web.uat.homecreditcfc.cn/trex/getSignTypes。索引部分不见了。

为什么Ajax中的相对路径在不同的环境中会有所不同? Ajax代码完全相同。有什么线索可以找到区别吗?谢谢。

我过去的UAT屏幕截图在这里。
javascript - Ajax中的相对路径在不同环境中的工作方式不同-LMLPHP

最佳答案

HTTP URL由几个部分组成:协议,主机名,端口,用户名,密码,路径,查询字符串(?....)和片段(#....)。

如您所怀疑,您的URL路径在dev中以/结尾,而在UAT中没有。可以将其视为“目录”:/trex/index//trex/index目录中的空文件名,而/trex/indexindex目录中的文件/trex。 Web服务器通常以相同的方式对待两者,但客户端却不这样:当您从那里进行相对路径时,在第一种情况下为/trex/index/getSignTypes,在第二种情况下为/trex/getSignTypes

通常可以通过创建重定向规则来解决此问题,这样您就永远不会以两种不同的方式(例如,将/trex/index重定向至/trex/index/)意外地写入相同的URL。

07-26 09:29