$.support.cors 澄清?
Posted
技术标签:
【中文标题】$.support.cors 澄清?【英文标题】:$.support.cors clarification? 【发布时间】: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。 【参考方案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请求。
【讨论】:
以上是关于$.support.cors 澄清?的主要内容,如果未能解决你的问题,请参考以下文章