0

我的目标是通过 WSSE 协议连接到 Symfony。当我尝试在本地连接到 Symfony 时,我有一个代码可以完美运行,但当我尝试连接到远程服务器上的同一个 Symfony 时却不行。(所有代码都一样,唯一改变的参数是 APILINK,我还设置了 .htaccess 以允许所有标头、请求和来源)

这是代码(javascript)

SimpleWSSEAuth.setup = function(username, password, salt, options) {
    $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
        jqXHR.setRequestHeader('Authorization', 'Authorization profile="UsernameToken"');
        jqXHR.setRequestHeader('X-WSSE',    SimpleWSSEAuth.BuildXWSSEHeader(username, password, salt));
    });
};

SimpleUserAPI.WSSEAuthentification = function(password, data, success, error) {
    SimpleWSSEAuth.setup(data.username, password, data.salt);

    $.ajax({type: 'GET', dataType:"json", url: APILINK + "public/user", crossDomain: true}).done(success).fail(error);
};

如您所见,我在 ajax 请求之前调用了 SimpleWSSEAuth.setup。

当 APILINK 位于本地时,这是我的请求:

在此处输入图像描述

这是我在 APILINK 很远时的请求:

在此处输入图像描述

如您所见,元素“ Authorization ”和“ X-WSSE ”出现在第一个请求中,但没有出现在第二个请求中。

如何更改我的请求以将这两个元素添加到远程服务器?是跨域问题吗?我试图在网上找到解决方案,但我没有找到任何实际可行的方法。

4

1 回答 1

0

通过查看远程 api 链接的屏幕截图,您的 ajax 调用会收到“405 方法不允许错误”。您需要将 dataType 设置为 JSONP 而不是 JSON,并在您的 ajax 方法中设置 crossDomain true

$.ajax({type: 'GET', dataType:" jsonp ", crossDomain: true , ...}}

于 2014-12-16T11:16:55.450 回答