Chrome应用程序中AJAX请求的限制是什么

What are the limitations on AJAX requests in Chrome Apps?

本文关键字:是什么 请求 应用程序 AJAX Chrome      更新时间:2024-06-03

我正在计划一个Chrome应用程序项目,在那里我将执行许多AJAX调用。在选择Chrome应用程序作为平台之前,我想更好地了解它在AJAX调用方面相对于web应用程序的局限性和优势。在进行了一些研究之后,我得出了以下答案。由于我在这方面的经验有限,我想知道我的发现是否正确,以及是否有其他限制需要考虑

1.来源

Chrome应用程序的原产地限制比web应用程序更灵活:通过请求跨原产地权限,可以在应用程序的清单中放宽与AJAX请求相关的原产地相同政策。因此,不需要像跨源资源共享(CORS)和JSONP(这实际上是内容安全策略(CSP)所禁止的)这样的技术。

2.内容

关于可访问内容的限制更为严重:Chrome应用程序只能引用应用程序中的脚本、样式表、图像、框架、插件和字体,但媒体资源(视频、音频和相关的文本轨道)可以从任何外部资源加载。"connect-src"指令被设置为允许加载任何URI,因此给定跨源权限或使用CORS,可以对所有主机进行AJAX调用,并接收文本和媒体类型的响应。其他内容类型可以用作Blob。CSP不能放松。

(我发现了一个特点:如上所述,CSP禁止加载几种内容类型,因此必须通过AJAX请求将其加载为Blob。由于同源策略,这必须通过CORS完成。大多数服务器都没有启用CORS,即使它们的内容是公共的。因此,如果Chrome应用程序始终强制执行"访问控制允许同源"(ACAO)响应标头,CORS方法在很多情况下都会失败。这个问题的解决方案是跨源权限:如果授予访问服务器的权限,即使没有收到适当的ACAO标头,也会允许请求通过。但也可以单独依赖CORS:如果没有授予跨源权限,但请求是向具有通配符ACAO设置的服务器发出的,则也会被允许通过。)

需要注意的另外两件事:

  • Chrome应用程序的一些文档引用了扩展,而不是应用程序。在这些情况下,我认为对应用程序也是正确的
  • 同步XHR请求被禁用

不幸的是,您只需要测试所有这些。我发现谷歌文档(尤其是Chrome应用程序)非常缺乏,而且经常出错。浏览文档时,他们似乎是为扩展而写的,复制了所有文档,然后当他们遇到差异时,他们更改了文档,但并没有涵盖所有内容。

关于访问外部来源,请遵循以下"说明":http://developer.chrome.com/apps/app_external.html#external

如果你发现问题,请在这里和https://code.google.com/p/chromium/issues/list