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

StackOverflow https://stackoverflow.com/questions/2626367

  •  26-09-2019
  •  | 
  •  

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

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

有帮助吗?

解决方案

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

access-control-allow-origin:*

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

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top