【问题标题】:$.support.cors clarification?$.support.cors 澄清?
【发布时间】:2013-06-05 11:13:45
【问题描述】:

作为阅读 signalR documentation 和 jQuery 文档的一部分

jQuery's docs states

如果浏览器可以创建 XMLHttpRequest 对象,Cors 等于 true 并且该 XMLHttpRequest 对象是否具有 withCredentials 属性。到 在不支持 cors 的环境中启用跨域请求 但确实允许跨域 XHR 请求(Windows 小工具等),设置 $.support.cors = true;

我知道不是所有浏览器都支持CORS (Access-Control-Allow-Origin: *)。

不过应该​​很简单,支持不支持。

我不明白这条线:

"在支持的环境中启用跨域请求 cors 但确实允许跨域 XHR 请求”

我在这里错过了什么吗?

【问题讨论】:

  • 据我所见,这个设置只是告诉 jquery 浏览器支持 Cors。除了我还没有发现它有用
  • 一些浏览器支持跨域请求,但不完全遵循 CORS 规范。例如,IE 8(和 9?)对跨域请求使用“XDomainRequest”对象,而不是 XMLHttpRequest。

标签: javascript jquery html signalr cors


【解决方案1】:

通过将$.support.cors 设置为 true,您是在告诉 jQuery 和 SignalR,即使 jQuery 的功能检测表明不支持 CORS,但执行 JS 的环境确实允许跨域 XHR。

每次我看到有人将此标志设置为真时,它都是错误的。 如果它在真正不支持 CORS 的环境中设置为 true,SignalR 将尝试使用 CORS(但失败)而不是使用可能有效的 JSONP 建立与服务器的跨域连接 .

jQuery 的特征检测(通过在 XHR 对象上查找 withCredentials 属性来工作)通常是准确的,只有在在浏览器中运行时才可能不正确。这就是为什么给出在桌面小部件中运行的 jQuery 示例的原因。在这种情况下,jQuery 可能会认为环境不支持 CORS,因为它确实不支持,但环境仍然允许任何跨域请求,无论响应中是否存在 Access-Control-Allow-Origin 标头因为它直接在桌面而不是在浏览器中运行。

这就是环境如何支持cors,但允许跨域XHR请求。

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2020-07-30
    • 2020-04-02
    相关资源
    最近更新 更多