【问题标题】:Call URL from another server using jQuery post使用 jQuery post 从另一台服务器调用 URL
【发布时间】: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 语法有问题,或者是您构建请求/标头/等的方式有问题。或者,根据错误,使用服务器。

标签: javascript jquery apache glassfish cors


【解决方案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 是的,实际上域是同一个,但端口号不同,对于两个不同的服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2013-12-14
    • 1970-01-01
    • 2013-01-24
    • 2021-03-05
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多