纯和传统的 Ajax 请求是不是可以在本机/混合移动应用程序上使用?
Posted
技术标签:
【中文标题】纯和传统的 Ajax 请求是不是可以在本机/混合移动应用程序上使用?【英文标题】:Are pure and traditional Ajax Requests possible on native / hybrid mobile apps?纯和传统的 Ajax 请求是否可以在本机/混合移动应用程序上使用? 【发布时间】:2014-03-21 20:19:27 【问题描述】:我知道使用 JSONP thechnique http://en.wikipedia.org/wiki/JSONP 我们可以进行跨域 Ajax 请求。
但是对于这个不算“纯粹和传统”的问题。
我只是想知道本机/混合应用程序是否也适用“同源策略”
http://en.wikipedia.org/wiki/Same-origin_policy
这件事似乎有很多困惑。
我的一个朋友发誓说他用“Ajax”代理将 Sencha Touch 2.3.1 + PhoneGap 3 连接到他的后端,我觉得很难相信(代理应该是 JSONP IMO),或者这只需要特殊的服务器配置因为从不应用同源策略'因为浏览器永远不会参与?
我知道这种问题可能不符合 SO 的精神,但我认为关于这个主题的一个好的答案会帮助很多人,因为我一直找不到答案。
最好的问候@code4jhon
【问题讨论】:
我不相信这是可能的,因为来自移动设备的请求的来源是file://
,并且基本上与从桌面打开 html 文档相同。我认为不可能从移动设备上运行任何类型的服务来充当服务器来发送来自file://
以外的特定来源的请求@
@Dawson Loudon 这意味着从 SenchaTouch + PhoneGap 使用 REST 服务必须使用 JSONP 技术?或者在开发 PhoneGap 应用时如何与后端通信?
@Dawson Loudon 到目前为止,我有一个 Java Jersey REST 应用程序和一个 Sencha Touch 2.3.1 + PhoneGap3 应用程序,我想知道什么是优雅的交流方式......
如果我可以控制后端,它通常是我要连接的 php 脚本,所以我将 allow-origin
标头设置为 all 并使用 jsonp
处理 ajax 请求。如果安全是一个问题,我会使用 https、api 密钥、会话令牌和基本身份验证之类的东西。
原生应用不受同源策略的约束(因为它是浏览器功能),并且可以从它们选择的任何地方请求数据。服务器甚至不必意识到这种性质。它只是像往常一样响应请求。
【参考方案1】:
PhoneGap 应用程序在 web 视图中而不是在浏览器中运行,因此 PhoneGap 应用程序不存在跨源问题,您可以对任何 URL 执行 AJAX 调用。
唯一需要注意的是config中有一个白名单参数“access origin”,用于限制对某些特定URL的访问。
对于较旧的 PhoneGap 版本,访问来源的默认设置是 localhost,但现在默认设置为“*”,允许访问任何 URL。
PhoneGap 不需要 JSONP 或 cors 标头。
【讨论】:
服务器端有什么特殊配置吗? 我已经使用 phonegap 和 ajax 调用与 java 或 php 服务器进行通信,并且从未在服务器端进行任何更改。以上是关于纯和传统的 Ajax 请求是不是可以在本机/混合移动应用程序上使用?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:在函数中混合异步与同步(缓存和 Ajax 请求)
混合内容 jQuery ajax HTTPS 请求已在 Laravel 上被阻止