【发布时间】:2018-12-16 13:33:22
【问题描述】:
我正在运行 asp.net c#,我试图从服务器上使用端口 9192 获取在客户端上运行的应用程序的状态。 为了解决这个问题,我调用了下面的 ajax get 调用。我的客户端都是vpn连接到服务器所以我使用客户端的vpn ip
但是我从控制台收到以下错误
XMLHttpRequest 无法加载 http://clientIP:9192/omxcmd?cmd=position。 请求中不存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://[my server name]:81' 因此是不允许的 访问。
我已经尝试从这里HTTP GET request in JavaScript?进行纯javascript调用
同样的错误 我还在我的 web.config 文件中添加了以下内容,它应该给我跨域调用,但这并没有产生任何影响。
<httpProtocol>
<customHeaders>
<!-- Enable Cross Domain AJAX calls -->
<remove name="Access-Control-Allow-Origin" />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
下面是我从我的 aspx 页面调用的 ajax 调用
$.ajax({
url: "http://VPNIPofCLIENT:9192/omxcmd?cmd=position",
type: "GET",
crossDomain: true,
dataType: "json",
success: function (response) {
var resp = JSON.parse(response)
alert(resp.status);
},
error: function (xhr, status) {
alert("error");
}
});
我还在客户端使用 chromium-browser --disable-web-security 启动了 chromium 浏览器,没有任何乐趣
使用“http://localhost:9192/omxcmd?cmd=position”会返回正确的字符串,因此它可以正常工作
【问题讨论】:
-
让服务器使用 HTTP 调用客户端似乎有点奇怪。通常情况正好相反,这使得谈论客户端/服务器关系变得更加困难。目前尚不清楚您的 ajax 调用发生在哪里。如果它来自客户端上运行的应用程序,则不会出现该错误,因为应用程序会调用自身,但如果它来自服务器上运行的应用程序,则不会使用
localhost,因为将环回服务器,而不是客户端。 -
你正确的 localhost 是错误的我是(问题已编辑)我使用的是客户端的 ip 地址
-
我只需要检查一个播放器是否在客户端上运行(它是一个 kiosk 类型的设置),唯一的方法是在端口 9192 上用作对客户端的 http 请求跨度>
标签: javascript c# jquery ajax http