跟我说,这个需要一些解释.
我正在帮助构建混合移动Web应用程序.主要代码库是HTML5和JavaScript,它将包装在本机移动Web视图(一个电话空间)中.
部分功能要求应用程序将信息发布到由我们的客户控制的Web服务.由于其他人正在使用此Web服务,因此几乎没有空间可以更改此Web服务.我们使用HTTP POST发送JSON并从服务器接收响应.此响应的一部分是一个JSESSIONID cookie,用于管理与服务器的会话.在初始initSession()调用之后,我们需要使用每个(AJAX)请求发送JSESSIONID cookie.
当部署在移动设备上时,Web应用程序将包装在本机Web视图中,该视图通过浏览启动Web应用程序file:///path/to/app/index.html.
我们尝试的第一件事是要求我们的客户Access-Control-Allow-Origin: *在其响应头中设置允许CORS.然后我们尝试发布到服务器:
$.ajax({
url: 'http://thirdparty.com/ws',
data: data,
type: "POST",
dataType: "JSON",
success: successCallback,
error: failedCallback
});
Run Code Online (Sandbox Code Playgroud)
监控请求,显然没有包含cookie.仔细观察后,CORS规范中有一个特殊部分用于处理用户凭证,其中包括会话cookie.所以我修改了AJAX调用以包含这个:
$.ajax({
url: 'http://thirdparty.com/ws',
data: data,
type: "POST",
dataType: "JSON",
success: successCallback,
error: failedCallback,
xhrFields { withCredentials: true }
});
Run Code Online (Sandbox Code Playgroud)
另一个错误,这次来自浏览器.更多阅读产生了以下内容:
如果第三方服务器没有响应
Access-Control-Allow-Credentials: true标头,则响应将被忽略,并且不可用于Web内容.重要说明:在响应凭证请求时,服务器必须在
Access-Control-Allow-Origin标头中指定域,并且不能使用通配符.
因此,我们需要更改服务器的标头以包含Access-Control-Allow-Credentials: true和Access-Control-Allow-Origin我们的Origin.
在这里,我们终于遇到了一个问题:使用file:// protocol加载网页时Origin,Web View发送的请求标头设置为null.因此无法由服务器解析,因此服务器无法将其设置为Access-Control-Allow-Origin.但是,如果服务器不能设置Access-Control-Allow-Origin到其他的东西比* …
我正在编写一个HTML5应用程序,它使用JSONP从几个不同的来源收集数据.我正在使用GET做的任何事情都能很好地完成.我现在正试图发布数据,我遇到了一个有趣的障碍.我需要将数据从我的应用程序POST到另一个应用程序从本地计算机运行.我正在尝试编写一个支持跨平台的移动应用程序(想想Pulse/Flipboard),因此代码将始终从本地源运行.我的思考过程如下:
file://,因此原始头为空.这会导致请求失败(XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用Origin null)我所针对的所有浏览器都是基于webkit的(iPad,Playbook,Android),所以我想知道我可以偷偷摸摸的相同原始政策代码中是否有任何吱吱声?也许是使用iframe或postMessage的东西?