2

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

jQuery的文档状态

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

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

但它应该很简单,不管它是否支持。

我不理解这条线:

“在尚不支持cors但允许跨域 XHR 请求的环境中启用跨域请求”

我在这里错过了什么吗?

4

1 回答 1

3

通过设置$.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 请求的原因。

于 2013-06-13T03:10:38.803 回答