【发布时间】:2013-12-28 15:20:24
【问题描述】:
我正在计划一个 Chrome 应用程序项目,我将在其中执行大量 AJAX 调用。在将 Chrome 应用程序作为首选平台之前,我想更好地了解与 Web 应用程序相比,它在 AJAX 调用方面的局限性和优势。在进行了一些研究后,我得出了以下答案。由于我在这方面的经验有限,我想知道我的发现是否正确,以及是否还有其他需要考虑的限制。
1.产地
对于 Chrome 应用程序的来源限制比 Web 应用程序更灵活:与 AJAX 请求相关的 same-origin policy 可以通过请求 cross-origin permissions 在应用程序的清单中放宽。因此,不需要像 Cross-Origin Resource Sharing (CORS) 和 JSONP 之类的技术(实际上是 Content Security Policy (CSP) 所禁止的)。
2。内容
关于可访问内容的限制更为严格:Chrome 应用程序can only refer to 应用程序内的脚本、样式表、图像、框架、插件和字体,但可以从任何外部加载媒体资源(视频、音频和相关文本轨道)资源。 ‘connect-src’ directive 设置为允许加载任何 URI,因此给予跨域权限或使用 CORS,可以对所有主机进行 AJAX 调用并接收文本和媒体类型响应。其他内容类型can be served as blobs. CSP 不能是relaxed.
(我发现的一个特点:如前所述,CSP 禁止加载多种内容类型,因此必须通过 AJAX 请求将它们作为 blob 加载。由于同源策略,这必须通过 CORS 完成。大多数服务器都没有启用 CORS,即使它们的内容是公开的。因此,如果 Chrome 应用程序始终强制执行“Access-Control-Allow-Origin”(ACAO)响应标头,CORS 方法在很多情况下都会失败. 这个问题的解决方案是跨域权限:如果授予访问服务器的权限,即使没有收到适当的 ACAO 标头,请求也会被允许通过。但是也可以单独依赖CORS:如果没有授予跨域权限,但是向server with wildcard ACAO settings发出请求,它也可以通过。)
另外需要注意的两点:
- Chrome 应用程序的一些文档提到了扩展而不是 应用。在这些情况下,我假设那里提供的信息是 也适用于应用程序。
- 同步 XHR 请求为 disabled.
【问题讨论】:
-
这些天你能从 Chrome 应用程序中使用 Ajax 吗?
标签: javascript ajax google-chrome-app