使用 jQuery post 从另一台服务器调用 URL

Posted

技术标签:

【中文标题】使用 jQuery post 从另一台服务器调用 URL【英文标题】:Call URL from another server using jQuery post 【发布时间】:2014-01-15 17:10:12 【问题描述】:

我正在使用jQuery.post() 方法向另一台服务器发送请求并从该服务器获取响应。

$.post('http://www.example.com:9876/example/myServletURL',param1:param1).done(function(data)

    alert(data);
);

但我没有收到来自服务器的任何响应。我已经检查了服务器,我收到了post 方法发送的请求。

如果将 URL 更改为与 war file(same domain) 相同的 Servlet,我会收到响应。

我搜索了一下,发现这可能是因为same origin policy。

我的问题是我应该如何使用jQuery.post() 方法允许跨域请求。

EDIT1

域相同,但端口号不同,用于部署的两台不同服务器。(Apache web server for php and Glassfish for java)

解决方案

我在我的 servlet 中添加了以下代码以允许跨域请求。

response.addHeader("Access-Control-Allow-Origin", "*");

【问题讨论】:

json-p.org 或几行 PHP 您为什么不尝试将您的请求设置为POSTMAN 之类的内容?它也可以生成适当的 CURL 命令来进行测试。如果它成功,那么您知道您的问题与您的特定代码有关。如果不成功,则可能是您的 CURL 语法有问题,或者是您构建请求/标头/等的方式有问题。或者,根据错误,使用服务器。 【参考方案1】:

您不能更改请求中的跨域请求策略,因为这会破坏同源策略的安全目的。必须在发送响应的服务器上启用 CORS(跨源资源共享)。响应头必须包含'Access-Control-Allow-Origin': '*'* 允许任何站点访问服务器,如果您不想授予所有人访问权限,可以用单个站点替换。如果您可以控制要发布到的服务器,http://enable-cors.org/index.html 是一个很好的资源,可帮助您了解如何为您的请求/响应启用 CORS。

【讨论】:

您的标头中有太多引号,它不一定是 * - Access-Control-Allow-Origin: http://allowed.site.com 也可以。 引用实际上取决于您用于设置标题的方法。我使用的引号在 node/express 上会很好。具体网站上的好点。我进行了编辑以反映这一点。 但是您没有将标题列为“如何设置它”,而是响应“必须包含这个”这是错误的 - 如果您在实际响应中有这些引号,它将被破坏;这适用于节点,因为我怀疑它是来自 JS 对象的键:值对:)【参考方案2】:

我在过去的项目中所做的是将数据从 jQuery 发布到我自己的服务器上的 ASPX 页面,然后将数据发布到真正的目标服务器。此页面还响应了来自目标服务器的响应。

我调用了 PostData.aspx 页面并将目标 url 作为转义的查询字符串参数发送,这使它足够柔软,可以在其他项目中使用。

【讨论】:

【参考方案3】:

您实际上可以在您的服务器上允许跨域请求,但要非常小心,因为这不是非常安全友好的方式

我用 PHP 做到了这一点,您可以通过在请求中发送一些标头来允许跨域。你可以在 PHP 中做同样的事情。

这个链接可能对你有帮助 => CrossDomain ajax request using CORS

如果不在 cmets 中告诉我。

【讨论】:

如果两个域都由 OP 控制,那么允许它们之间通信的安全问题在哪里? @CollinGrady 是的,实际上域是同一个,但端口号不同,对于两个不同的服务器。

以上是关于使用 jQuery post 从另一台服务器调用 URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSONP 从另一台服务器获取 JSON 数据

如何使用 C# 从另一台服务器远程管理 IIS?

为啥我无法从另一台计算机连接到 openfire 服务器?

Vue.js - 是不是可以使用 Javascript 动态导入从另一台服务器加载组件?

MySQL:从另一台服务器选择

从另一台计算机或手机添加数据后,如何更新计算机上的视图?