代码之家  ›  专栏  ›  技术社区  ›  Greg Bray

是否有设置了“access control allow origin:*”头的jquery托管版本?

  •  7
  • Greg Bray  · 技术社区  · 15 年前

    我最近一直在使用jquery,遇到了一个问题,因为xmlhttpRequest使用了 same origin policy . 经过进一步的测试,我发现大多数浏览器也支持 Cross-Origin Resource Sharing W3C将访问控制定义为解决具有相同源策略的问题的方法。我通过在包含 Access-Control-Allow-Origin: * HTTP头,它允许使用XMLHttpRequest下载脚本,以便它可以包含在我的用户脚本中。我想在发布脚本时使用jquery的宿主版本,但到目前为止,使用类似 http://www.seoconsultants.com/tools/headers 我没有找到任何允许跨源站访问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,但我想我现在只能自己托管它。

    3 回复  |  直到 10 年前
        1
  •  2
  •   hlascelles    10 年前

    既然你问了这个问题,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>
    
        2
  •  2
  •   Aejay    13 年前

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

    为了解决这个问题,我尝试了很多方法,花了太多的时间去寻找并尝试允许跨域访问的脚本主机。不过,最终我得出了这样的结论:如果我要依赖某个未知的脚本宿主版本,我也可以自己宿主它,因为我比考虑的宿主更信任自己。

        3
  •  2
  •   zcrar70    13 年前

    AmazonCloudFront允许您设置访问控制允许来源报头。基本上,如果您自己托管jquery,然后在它前面插入一个cloudfront cdn,cloudfront将把您设置的任何头传递给客户机:

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

    cloudfront cdn是针对每个亚马逊用户设置的;与托管的Google API相比,这一点的缺点是,第一次访问您的站点的访问者不会通过访问其他站点来加载jquery(因此从缓存中获益)。