$ .support.cors澄清?

时间:2013-06-09 18:53:54

标签: javascript jquery html5 signalr cors

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

jQuery's docs states

  

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

我知道所有浏览器支持CORSAccess-Control-Allow-Origin: *)。

但它应该非常简单,无论是支持还是不支持。

我不喜欢这条线:

  

“在支持的环境中启用跨域请求   但是允许跨域XHR请求“

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

环境可以支持cors,但允许跨域XHR请求。