【问题标题】:How to make cross domain request [duplicate]如何进行跨域请求[重复]
【发布时间】:2013-07-26 07:58:51
【问题描述】:

如您所知,网络浏览器的安全性不允许进行跨域请求。我读过一本书,它说只有在可以将文件放在服务器上时才应该使用 XMLHTTPRequest(意味着将要加载的页面放在同一个请求的域中)。如果你不能 - 你应该寻找替代方案。

我的问题是

  1. XMLHTTPRequest 的跨域替代方案是什么?
  2. WebSockets 呢?该技术是否允许跨域请求?

编辑: 我还是不清楚……

例如,我从 www.domain1.com 拉我的页面,我需要从 www.domain2.com 请求 javascript。所以拉取的页面应该包括如下内容:

<script src="www.domain2.com/script.js"></script>

避免跨域限制。

我可以使用 JSONP,请求将如下所示: http://ww.domain1.com/?callback=someFunction.js

但是:不一样吗?我只是从另一个域中提取 js!是否避免跨域限制?

【问题讨论】:

标签: javascript websocket xmlhttprequest cross-domain


【解决方案1】:

您可以使用XMLHttpRequest 对象进行跨域请求。这是使用称为“跨源资源共享”的东西完成的。看: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

非常简单地说,当向服务器发出请求时,服务器可以使用Access-Control-Allow-Origin 标头进行响应,该标头将允许或拒绝该请求。浏览器需要检查此标头,如果允许,则它将继续请求过程。如果不是,浏览器将取消请求。

您可以在此处找到更多信息和工作示例: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

JSONP 是一种替代解决方案,但您可能会说它有点像 hack。

【讨论】:

  • 我认为这也是一种 hack。不过,并没有阻止我使用它! :D
  • @CharlesWood 不要天真...安全服务器将检查此标头的值,然后决定是否应允许请求;)
  • @Leo 是的,我不知道我在想什么:D
【解决方案2】:

进行跨域 AJAX 调用

您的网络服务必须支持方法注入才能执行 JSONP。

您的代码看起来不错,如果您的 Web 服务和您的 Web 应用程序托管在同一个域中,它应该可以工作。

当您使用 dataType: 'jsonp' 执行 $.ajax 时,这意味着 jQuery 实际上是在向查询 URL 添加一个新参数。

例如,如果您的 URL 是 http://10.211.2.219:8080/SampleWebService/sample.do,那么 jQuery 将添加 ?callback={some_random_dynamically_generated_method}。

这个方法更像是一种实际附加在窗口对象中的代理。这并不具体,但看起来像这样:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

查看以下内容了解更多信息

Make cross-domain ajax JSONP request with jQuery

【讨论】:

  • 是的,谢谢。但是您能否提供问题 id 编辑区域的答案,请
【解决方案3】:

如果您愿意传输一些数据并且您不需要受到保护(任何公共信息),您可以使用 CORS 代理,这非常简单,您无需更改代码中的任何内容或在服务器端(尤其是它不是您的服务器,例如 Yahoo API 或 OpenWeather)。 我用它来获取带有 XMLHttpRequest 的 JSON 文件,它运行良好。

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2016-09-19
    • 2017-06-17
    • 2017-07-31
    • 2013-10-15
    • 1970-01-01
    • 2012-12-13
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多