使用 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的主要内容,如果未能解决你的问题,请参考以下文章