Xhtml中的跨域请求

Posted

技术标签:

【中文标题】Xhtml中的跨域请求【英文标题】:cross domain request in Xhtml 【发布时间】:2018-02-16 03:28:33 【问题描述】:

我正在尝试从 HbbTV 应用程序 (xhtml) 发送 https 请求以从 https://www.meethue.com/api/nupnp 获取信息。

XMLHttpRequest 是我的第一个选择,但由于相同的来源政策,它显然行不通。作为替代方案,我找到了 CORS,但据我了解,它需要 XMLHttpRequest2,它是 HTML5 的一部分,对吗?

我可以使用任何功能、方法或解决方法来实现我的目标吗?

最好的问候 阿德里安

【问题讨论】:

XMLHttpRequest cannot load https://www.[website].com/的可能重复 请特别注意重复问题的已接受答案中标题为“CORS 的替代方案”的部分。 "它需要 XMLHttpRequest2,它是 HTML5 的一部分" — XMLHttpRequest 和 HTML 是独立的规范,它们之间没有依赖关系。 This HbbTV documentation 暗示它支持 CORS。您是否测试过它是否受支持? 【参考方案1】:

XMLHttpRequest 是我的第一选择,但由于同源策略,它显然行不通。

我不明白。

从这里在 *** 上,我使用以下 sn-p 在您提供的端点上运行 XHR 没有问题:

function fetchData() 
  var URL = 'https://www.meethue.com/api/nupnp';
  var xhr = new XMLHttpRequest();

  xhr.onreadystatechange = function() 
      if (xhr.readyState == XMLHttpRequest.DONE) 
        document.getElementById('response')
          .innerHTML = "Response: " + xhr.responseText
      
  
  xhr.open('GET', URL)
  xhr.send()
<div id='response' onclick='fetchData()'>Click to fetch</div>

CORS(跨域资源共享)本身与其说是一种技术,不如说是一种规范。

它定义了仅当目标端点指定允许源在那里获取时才允许跨源请求。 如果你想了解更多,我推荐 MDN 上的这篇优秀文章:HTTP Access Control (CORS)

另外,如果您的平台支持它或者您可以对其进行 polyfill,我建议您使用 Fetch 而不是 XHR。

【讨论】:

天哪,非常感谢。我非常专注于文档和不同的解决方案,以至于我在某些时候将 GET 更改为 POST,浪费了很多时间。感谢您的所有帮助。

以上是关于Xhtml中的跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

Ajax中的跨域请求(跨源请求)

HTTP中的跨域请求HTTP报文结构状态码

JavaScript 中的跨域请求与 jQuery 的 JSONP

JavaScript中的跨域

如何修复 Firefox 中的跨域请求失败

Internet Explorer 中的跨域 POST 请求 ajax