【问题标题】:Why do browser blocks specific Ajax requests?为什么浏览器会阻止特定的 Ajax 请求?
【发布时间】:2015-12-17 22:56:41
【问题描述】:

我有两个代码sn-ps:

$.getJSON("https://noembed.com/embed", {"format": "json", "url": input.val()}, function (data) {
// work with data
});

第二个:

$.getJSON("https://www.youtube.com/oembed", {"format": "json", "url": input.val()}, function (data) {
// work with data
});

第一个会成功,但第二个不会。他们都是从http://localhost:8080/myapp/page发送的。为什么同源策略不允许两个请求? (其实是浏览器的问题)。

【问题讨论】:

  • 跨域资源共享
  • 有些服务器允许浏览器进行跨源请求,有些则不允许。见CORS
  • @jfriend00 所以区别在于 youtube 不包含 Access-Control-Allow-Origin 标头?
  • 是的。可能涉及多个 CORS 标头,因此要么它们都不存在,要么 YouTube 缺少此特定操作所需的东西。但是,关键是服务器决定它是否要允许来自浏览器的跨源操作,因此您的两个服务器在这方面提供了不同的功能。
  • @jfriend00 感谢您的回复!如果您将此作为答案-我将很乐意接受。另外,也许您有解释为什么 youtube 不允许此类请求?

标签: javascript ajax cross-domain same-origin-policy cross-domain-policy


【解决方案1】:

有些服务器允许浏览器进行跨源请求,有些则不允许。见CORS

可能涉及多个 CORS 标头,因此要么它们都不存在,要么 YouTube 缺少此特定操作所需的某些内容。但是,关键是服务器决定是否要允许来自浏览器的跨源操作,因此您的两个服务器在这方面提供了不同的功能。

这个特定的 youtube API 有点可疑,因为它的存在纯粹是出于跨域原因,所以肯定有其他事情正在阻止它工作。要了解更多信息,必须查看网络跟踪以确切了解发送到 youtube 的内容、存在哪些 CORS 标头以及可能导致此问题的确切原因。例如,是否可能存在 http/https 不匹配,这就是 CORS 失败的原因?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2015-03-09
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2017-06-25
    相关资源
    最近更新 更多