检测跨域 XMLHttpRequests 的服务器/站点支持?

Posted

技术标签:

【中文标题】检测跨域 XMLHttpRequests 的服务器/站点支持?【英文标题】:Detect server/site support for cross-domain XMLHttpRequests? 【发布时间】:2012-03-15 02:12:28 【问题描述】:

我很想看看用什么最小的跨浏览器 javascript 代码(jQuery 也可以)来验证我希望发送跨域 AJAX 请求的站点是否支持CORS

我知道 jQuery 有一种方法可以检查 浏览器 是否支持它。但我真的希望能够检查远程站点是否也支持它。

我以为我只需要检查 HTTP 标头,但是当尝试向不特别支持它的站点执行跨域请求时,XHR 当然会抛出异常。

但是有没有办法检查XMLHttpRequest 抛出的异常是由于站点不支持CORS 而不是其他问题? (它不必支持 XDomainRequest。)

无论如何,我不确定使用 AJAX 获取 HTTP HEAD 的最佳最小/最快跨浏览器方式,我认为这是一种轻量级方式,而不是获取页面等。

用例:一旦我知道浏览器和 AJAX 提供程序是否支持CORS,我可以选择是发送更有功能的JSON/CORS 请求还是在必要时回退到JSONP 请求。

【问题讨论】:

【参考方案1】:

就specification而言,这是不可能的。

如果出现网络错误:如果出现 DNS 错误,TLS 协商 失败或其他类型的网络错误,应用网络错误 脚步。不要请求任何类型的最终用户交互...

否则:执行资源共享检查。如果返回失败,请应用网络错误步骤...

没有特殊的方法来识别不允许使用 CORS 的情况,因为在任何情况下都会应用 network error steps。

【讨论】:

以上是关于检测跨域 XMLHttpRequests 的服务器/站点支持?的主要内容,如果未能解决你的问题,请参考以下文章

axios的使用与跨域问题的解决

cors跨域之简单请求与预检请求(发送请求头带令牌token)

在循环中执行异步XMLHttpRequests,并在所有请求完成后继续

检测此页面是不是在跨域 iframe 内部的万无一失的方法

如何在php中检测ajax跨域请求

js 检测链接是否有效(包含跨域)