任何具有“Access-Control-Allow-Origin: *”标头集的 jQuery 托管版本?

Posted

技术标签:

【中文标题】任何具有“Access-Control-Allow-Origin: *”标头集的 jQuery 托管版本?【英文标题】:Any hosted versions of jQuery that have the 'Access-Control-Allow-Origin: *' header set? 【发布时间】:2011-02-07 06:08:00 【问题描述】:

我最近一直在使用 jQuery,但遇到了一个问题,我无法将它包含在用户脚本中,因为 XmlHttpRequest 使用了same origin policy。经过进一步测试,我发现大多数浏览器也支持 W3C 定义的Cross-Origin Resource Sharing 访问控制,作为同源策略问题的解决方法。我通过在包含 Access-Control-Allow-Origin: * http 标头的本地 Web 服务器上托管 jQuery 脚本来测试这一点,它允许使用 XmlHttpRequest 下载脚本,以便它可以包含在我的用户脚本中。我想在发布脚本时使用托管版本的 jQuery,但到目前为止,我使用http://www.seoconsultants.com/tools/headers 等工具进行测试,我还没有找到任何允许跨域访问 jQuery 脚本的站点。这是我迄今为止测试过的列表:

http://www.asp.net/ajaxlibrary/CDN.ashx http://code.google.com/apis/ajaxlibs/documentation/index.html#jquery http://docs.jquery.com/Downloading_jQuery#CDN_Hosted_jQuery

是否有任何其他托管版本的 jQuery 允许跨源访问?我知道 jQuery 通常是通过脚本标签(有时是动态创建的脚本标签)加载的,但在这种特定情况下,我必须使用 XmlHttpRequest 和 Eval 来确保它被加载到正确的范围内。 Google Chrome 支持用户脚本但不支持@require,这意味着使用jquery in a user script in Google Chrome 的唯一方法是将其嵌入到.user.js 文件中或通过XmlHttpRequest 加载和评估它。嵌入不是最佳解决方案,虽然 Chrome 扩展允许您在扩展中包含 jQuery js 文件,但我更愿意坚持使用用户脚本,因为它们更简单并且可以在多个浏览器中运行。我已经向 Google Ajax APIs 和 jQuery 团队提交了工单,以允许跨域访问 CDN,但我猜我现在只能自己托管。

【问题讨论】:

为什么需要通过XMLHttpRequest导入jQuery?为什么不直接为它创建一个脚本标签呢? @Pointy 我用更多信息更新了这个问题,但长话短说我正在尝试使用 jQuery 创建一个可在 Google Chrome 和 Firefox 上运行的用户脚本。 老实说,有时候使用自己的主机是一个很好的游戏计划:看起来这就是其中之一。只要确保它是好的和缓存的,它不像 jQuery 是一个巨大的文件。 @Kyle。是的,我想可能是这种情况,但我还是想问一下。在 Google Chrome 中使用 Greasemonkey 脚本时,这是一个常见问题,所以我希望编写 2-3 行 JS 可以添加到脚本中以支持 Chrome,但是如果我必须托管 jQuery,那实际上效果不佳我。这不仅仅是带宽,因为告诉人们从 Google/jQuery CDN 加载 jQuery 与告诉他们从我的个人网站下载有很大不同。 【参考方案1】:

自从您提出这个问题以来,Google CDN 已按要求添加了这些标头。 https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js 的快速 GET 生成标题:

access-control-allow-origin:*

所以添加一个这样的脚本标签就可以了:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" crossorigin="anonymous" type="text/javascript"></script>

【讨论】:

【参考方案2】:

Amazon Cloudfront 允许您设置 Access-Control-Allow-Origin 标头。基本上,如果您自己托管 jQuery,然后在其前面放置一个 Cloudfront CDN,Cloudfront 会将您设置的任何标头转发回客户端:

your jQuery -> Cloudfront jQuery -> Client Browser
[header set]   [header set]         [header set]

Cloudfront CDN 是按亚马逊用户设置的;与托管的 Google API 相比,这样做的缺点是首次访问您网站的访问者不会通过访问另一个网站来加载 jQuery(因此可以从缓存中受益。)

【讨论】:

【参考方案3】:

我遇到了同样的问题,我的解决方案最终是自己托管文件。使用我自己的主机,我可以允许 jQuery 脚本的跨域请求。

我试图跳过很多麻烦来解决这个问题,并且花了太多时间试图寻找并尝试允许跨域访问的脚本主机。不过,最终我得出的结论是,如果我要依赖某个未知的托管版本的脚本,我还不如自己托管它,因为我更信任自己而不是我考虑的主持人。

【讨论】:

以上是关于任何具有“Access-Control-Allow-Origin: *”标头集的 jQuery 托管版本?的主要内容,如果未能解决你的问题,请参考以下文章

ABP PUTDELETE请求错误405.0 - Method Not Allowed 因为使用了无效方法(HTTP 谓词) 引发客户端错误 No 'Access-Control-Allow

javascript中跨域的http post请求

使用 CORS 的 Javascript 和 angularjs

node---express

PHP 跨域问题 (转)

发现任何元素是不是在 jQuery 中具有任何类