通过节点代理调用 WCF 服务仅适用于本地主机

Calling WCF service over node proxy works on localhost only

我正在尝试调用另一个域上的 WCF 数据服务。该服务使用 NTLM,返回的 JSON 取决于经过身份验证的用户。我正在使用 node-http-proxy 来解决跨域问题。 服务,比方说

http://otherdomain:1234/dataservice.svc/getData

returns一个JSON喜欢

    {
        "description": "xxxxx",   
        "data": {
            "subclass": [
                [
                    {
                        "name": "xxxxx",
                        "keys": {     
                        },
                        "children": "xx"
                    }
                ]
            ]
        },
        "parameter": "someparam",
        "option": {
              "someoption": []
            }
     }

对于没有配置数据的用户,它只是returns一个空的JSON骨架,如

    {
        "description": "",   
        "data": {},
        "parameter": "",
        "option": {}
     }

在我的代理服务器中,我将 target 设置为 http://otherdomain:1234 并将服务调用为

http://localhost:8003/dataservice.svc/getData

来自我的客户端应用程序。这工作得很好(直接从应用程序和浏览器)。 NTLM 身份验证正在运行;没有 CORS 问题。我得到的 JSON 就像第一个例子一样。

但是当我使用我的 IP 地址调用代理时,就像这样

http://10.203.147.21:8003/dataservice.svc/getData

我只得到空的 JSON 框架,没有其他错误。这里发生了什么?使用本地主机但不使用 IP。

有趣的是,实际服务也会发生这种情况;即,如果我使用数据服务器的 IP 地址(直接从浏览器调用)而不是名称,我会得到类似的空 JSON。

http://10.203.147.34:1234/dataservice.svc/getData

有人能解释一下这是怎么回事吗?如何解决?

httpProxyoptions 对象中将 changeOrigin 设置为 true 已解决此问题。现在代理能够正确协商来自不同域的 NTLM。 猜测服务器正在为来自不同来源的请求返回空响应。